{
  "id": 244045,
  "title": "请问怎么定义target_transform将标签改成顺序型数据？",
  "url": "/competitions/classify-leaves/discussion/244045",
  "author_name": "",
  "post_date": "2021-06-05T02:58:44.767902600Z",
  "votes": 1,
  "comment_count": 4,
  "views": 0,
  "content": "<p>我定义了一个Dataset类来生成DataLoader，请问怎么用target_transform将标签（字符串）改成顺序型数据。下面是改成one hot的示例。</p>\n<p>from torchvision import datasets<br>\nfrom torchvision.transforms import ToTensor, Lambda</p>\n<p>ds = datasets.FashionMNIST(<br>\n    root=\"data\",<br>\n    train=True,<br>\n    download=True,<br>\n    transform=ToTensor(),<br>\n    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))<br>\n)</p>",
  "messages": [
    {
      "id": "1336541",
      "postDate": "06/05/2021 02:58:44",
      "content": "<p>我定义了一个Dataset类来生成DataLoader，请问怎么用target_transform将标签（字符串）改成顺序型数据。下面是改成one hot的示例。</p>\n<p>from torchvision import datasets<br>\nfrom torchvision.transforms import ToTensor, Lambda</p>\n<p>ds = datasets.FashionMNIST(<br>\n    root=\"data\",<br>\n    train=True,<br>\n    download=True,<br>\n    transform=ToTensor(),<br>\n    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))<br>\n)</p>",
      "rawMarkdown": "我定义了一个Dataset类来生成DataLoader，请问怎么用target_transform将标签（字符串）改成顺序型数据。下面是改成one hot的示例。\n\nfrom torchvision import datasets\nfrom torchvision.transforms import ToTensor, Lambda\n\nds = datasets.FashionMNIST(\n    root=\"data\",\n    train=True,\n    download=True,\n    transform=ToTensor(),\n    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))\n)",
      "votes": null
    },
    {
      "id": "1341795",
      "postDate": "06/09/2021 02:35:31",
      "content": "<p>可以参考以下方法对string类型标签进行编码为Int型类别，当然也可以继续转换成ont hot类型</p>\n<pre><code>train_df = pd.read_csv('path/to/train.csv')\nlabels = train_df.label.unique()\nlabel_encoder = {}\nfor idx, name in enumerate(labels):\n    label_encoder.update({name:idx})\n\ntrain_df.label = train_df.label.apply(lambda x: label_encoder[x])\n</code></pre>",
      "rawMarkdown": "可以参考以下方法对string类型标签进行编码为Int型类别，当然也可以继续转换成ont hot类型\n```python\ntrain_df = pd.read_csv('path/to/train.csv')\nlabels = train_df.label.unique()\nlabel_encoder = {}\nfor idx, name in enumerate(labels):\n    label_encoder.update({name:idx})\n\ntrain_df.label = train_df.label.apply(lambda x: label_encoder[x])\n```",
      "votes": null
    },
    {
      "id": "1345947",
      "postDate": "06/12/2021 01:44:57",
      "content": "<p>我的方法是对所有标签去重后排序，建立一个映射之后<strong>getitem</strong>中将每个item的label对应上映射中的index</p>",
      "rawMarkdown": "我的方法是对所有标签去重后排序，建立一个映射之后__getitem__中将每个item的label对应上映射中的index",
      "votes": null
    },
    {
      "id": "1354190",
      "postDate": "06/17/2021 12:45:58",
      "content": "<p><a href=\"https://www.kaggle.com/nekokiku/simple-resnet-baseline\" target=\"_blank\">https://www.kaggle.com/nekokiku/simple-resnet-baseline</a><br>\n参考这位同学提供的baseline，可以说是很详细了。👍</p>",
      "rawMarkdown": "https://www.kaggle.com/nekokiku/simple-resnet-baseline\n参考这位同学提供的baseline，可以说是很详细了。👍",
      "votes": null
    },
    {
      "id": "1367713",
      "postDate": "06/28/2021 03:46:22",
      "content": "<p>df = pd.read_csv('mount/My Drive/Colab Notebooks/d2l/data/classify-leaves/train.csv')<br>\ncategory = df[\"label\"].unique()<br>\ndict = {}<br>\nfor i,c in enumerate(category):<br>\n  dict[c] = i</p>\n<p>target_transform = transforms.Lambda(lambda y:dict[y])</p>",
      "rawMarkdown": "df = pd.read_csv('mount/My Drive/Colab Notebooks/d2l/data/classify-leaves/train.csv')\ncategory = df[\"label\"].unique()\ndict = {}\nfor i,c in enumerate(category):\n  dict[c] = i\n\ntarget_transform = transforms.Lambda(lambda y:dict[y])",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1341795,
      "author_name": "seefun",
      "author_url": "",
      "post_date": "06/09/2021 02:35:31",
      "content": "<p>可以参考以下方法对string类型标签进行编码为Int型类别，当然也可以继续转换成ont hot类型</p>\n<pre><code>train_df = pd.read_csv('path/to/train.csv')\nlabels = train_df.label.unique()\nlabel_encoder = {}\nfor idx, name in enumerate(labels):\n    label_encoder.update({name:idx})\n\ntrain_df.label = train_df.label.apply(lambda x: label_encoder[x])\n</code></pre>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1345947,
      "author_name": "weishuozhao",
      "author_url": "",
      "post_date": "06/12/2021 01:44:57",
      "content": "<p>我的方法是对所有标签去重后排序，建立一个映射之后<strong>getitem</strong>中将每个item的label对应上映射中的index</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1354190,
      "author_name": "charlesyyun",
      "author_url": "",
      "post_date": "06/17/2021 12:45:58",
      "content": "<p><a href=\"https://www.kaggle.com/nekokiku/simple-resnet-baseline\" target=\"_blank\">https://www.kaggle.com/nekokiku/simple-resnet-baseline</a><br>\n参考这位同学提供的baseline，可以说是很详细了。👍</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1367713,
      "author_name": "liujiedeeplearning",
      "author_url": "",
      "post_date": "06/28/2021 03:46:22",
      "content": "<p>df = pd.read_csv('mount/My Drive/Colab Notebooks/d2l/data/classify-leaves/train.csv')<br>\ncategory = df[\"label\"].unique()<br>\ndict = {}<br>\nfor i,c in enumerate(category):<br>\n  dict[c] = i</p>\n<p>target_transform = transforms.Lambda(lambda y:dict[y])</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1336541": "我定义了一个Dataset类来生成DataLoader，请问怎么用target_transform将标签（字符串）改成顺序型数据。下面是改成one hot的示例。\n\nfrom torchvision import datasets\nfrom torchvision.transforms import ToTensor, Lambda\n\nds = datasets.FashionMNIST(\n    root=\"data\",\n    train=True,\n    download=True,\n    transform=ToTensor(),\n    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))\n)",
    "1341795": "可以参考以下方法对string类型标签进行编码为Int型类别，当然也可以继续转换成ont hot类型\n```python\ntrain_df = pd.read_csv('path/to/train.csv')\nlabels = train_df.label.unique()\nlabel_encoder = {}\nfor idx, name in enumerate(labels):\n    label_encoder.update({name:idx})\n\ntrain_df.label = train_df.label.apply(lambda x: label_encoder[x])\n```",
    "1345947": "我的方法是对所有标签去重后排序，建立一个映射之后__getitem__中将每个item的label对应上映射中的index",
    "1354190": "https://www.kaggle.com/nekokiku/simple-resnet-baseline\n参考这位同学提供的baseline，可以说是很详细了。👍",
    "1367713": "df = pd.read_csv('mount/My Drive/Colab Notebooks/d2l/data/classify-leaves/train.csv')\ncategory = df[\"label\"].unique()\ndict = {}\nfor i,c in enumerate(category):\n  dict[c] = i\n\ntarget_transform = transforms.Lambda(lambda y:dict[y])"
  },
  "source": "meta"
}