PyTorch GRU 模型分类: 使用 TXT 数据进行 8 类分类
import\u0020torch\nimport\u0020torch.nn\u0020as\u0020nn\nimport\u0020torch.optim\u0020as\u0020optim\nfrom\u0020torch.utils.data\u0020import\u0020DataLoader,\u0020Dataset\n\n#\u0020Define\u0020the\u0020GRU\u0020model\nclass\u0020GRUModel(nn.Module):\n\u0020\u0020def\u0020__init__(self,\u0020input_size,\u0020hidden_size,\u0020num_classes):\n\u0020\u0020\u0020\u0020super(GRUModel,\u0020self).init()\n\u0020\u0020\u0020\u0020self.hidden_size\u0020=\u0020hidden_size\n\u0020\u0020\u0020\u0020self.gru\u0020=\u0020nn.GRU(input_size,\u0020hidden_size,\u0020batch_first=True)\n\u0020\u0020\u0020\u0020self.fc\u0020=\u0020nn.Linear(hidden_size,\u0020num_classes)\n\u0020\u0020\u0020\u0020\n\u0020\u0020def\u0020forward(self,\u0020x):\n\u0020\u0020\u0020\u0020h0\u0020=\u0020torch.zeros(1,\u0020x.size(0),\u0020self.hidden_size).to(device)\n\u0020\u0020\u0020\u0020out,\u0020_\u0020=\u0020self.gru(x,\u0020h0)\n\u0020\u0020\u0020\u0020out\u0020=\u0020self.fc(out[:,\u0020-1,\u0020:])\n\u0020\u0020\u0020\u0020return\u0020out\n\n#\u0020Define\u0020the\u0020dataset\u0020class\nclass\u0020MyDataset(Dataset):\n\u0020\u0020def\u0020__init__(self,\u0020file_path):\n\u0020\u0020\u0020\u0020self.data\u0020=\u0020[]\n\u0020\u0020\u0020\u0020self.labels\u0020=\u0020[]\n\u0020\u0020\u0020\u0020with\u0020open(file_path)\u0020as\u0020f:\n\u0020\u0020\u0020\u0020\u0020\u0020lines\u0020=\u0020f.readlines()\n\u0020\u0020\u0020\u0020\u0020\u0020for\u0020line\u0020in\u0020lines:\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020line\u0020=\u0020line.strip().split(',')\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020self.data.append([float(x)\u0020for\u0020x\u0020in\u0020line[:-1]])\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020self.labels.append(int(line[-1]))\n\u0020\u0020\u0020\u0020\n\u0020\u0020def\u0020__getitem__(self,\u0020index):\n\u0020\u0020\u0020\u0020return\u0020torch.Tensor(self.data[index]),\u0020self.labels[index]\n\u0020\u0020\u0020\u0020\n\u0020\u0020def\u0020__len__(self):\n\u0020\u0020\u0020\u0020return\u0020len(self.data)\n\n#\u0020Hyperparameters\ninput_size\u0020=\u002023\nhidden_size\u0020=\u002064\nnum_classes\u0020=\u00208\nbatch_size\u0020=\u00204\nnum_epochs\u0020=\u002010\nlearning_rate\u0020=\u00200.001\n\n#\u0020Device\u0020configuration\ndevice\u0020=\u0020torch.device('cuda'\u0020if\u0020torch.cuda.is_available()\u0020else\u0020'cpu')\n\n#\u0020Load\u0020the\u0020dataset\ndataset\u0020=\u0020MyDataset('data.txt')\ndataloader\u0020=\u0020DataLoader(dataset,\u0020batch_size=batch_size,\u0020shuffle=True)\n\n#\u0020Initialize\u0020the\u0020model\nmodel\u0020=\u0020GRUModel(input_size,\u0020hidden_size,\u0020num_classes).to(device)\n\n#\u0020Loss\u0020and\u0020optimizer\ncriterion\u0020=\u0020nn.CrossEntropyLoss()\noptimizer\u0020=\u0020optim.Adam(model.parameters(),\u0020lr=learning_rate)\n\n#\u0020Training\u0020loop\ntotal_step\u0020=\u0020len(dataloader)\nfor\u0020epoch\u0020in\u0020range(num_epochs):\n\u0020\u0020for\u0020i,\u0020(inputs,\u0020labels)\u0020in\u0020enumerate(dataloader):\n\u0020\u0020\u0020\u0020inputs\u0020=\u0020inputs.to(device)\n\u0020\u0020\u0020\u0020labels\u0020=\u0020labels.to(device)\n\u0020\u0020\u0020\u0020\n\u0020\u0020\u0020\u0020#\u0020Forward\u0020pass\n\u0020\u0020\u0020\u0020outputs\u0020=\u0020model(inputs)\n\u0020\u0020\u0020\u0020loss\u0020=\u0020criterion(outputs,\u0020labels)\n\u0020\u0020\u0020\u0020\n\u0020\u0020\u0020\u0020#\u0020Backward\u0020and\u0020optimize\n\u0020\u0020\u0020\u0020optimizer.zero_grad()\n\u0020\u0020\u0020\u0020loss.backward()\n\u0020\u0020\u0020\u0020optimizer.step()\n\u0020\u0020\u0020\u0020\n\u0020\u0020\u0020\u0020#\u0020Print\u0020training\u0020progress\n\u0020\u0020\u0020\u0020if\u0020(i+1)\u0020%\u002010\u0020==\u00200:\n\u0020\u0020\u0020\u0020\u0020\u0020print('Epoch\u0020[{}/{}],\u0020Step\u0020[{}/{}],\u0020Loss:\u0020{:.4f}'.format(epoch+1,\u0020num_epochs,\u0020i+1,\u0020total_step,\u0020loss.item()))\n\n#\u0020Test\u0020the\u0020model\nmodel.eval()\nwith\u0020torch.no_grad():\n\u0020\u0020correct\u0020=\u00200\n\u0020\u0020total\u0020=\u00200\n\u0020\u0020for\u0020inputs,\u0020labels\u0020in\u0020dataloader:\n\u0020\u0020\u0020\u0020inputs\u0020=\u0020inputs.to(device)\n\u0020\u0020\u0020\u0020labels\u0020=\u0020labels.to(device)\n\u0020\u0020\u0020\u0020outputs\u0020=\u0020model(inputs)\n\u0020\u0020\u0020\u0020_,\u0020predicted\u0020=\u0020torch.max(outputs.data,\u00201)\n\u0020\u0020\u0020\u0020total\u0020+=\u0020labels.size(0)\n\u0020\u0020\u0020\u0020correct\u0020+=\u0020(predicted\u0020==\u0020labels).sum().item()\n\u0020\u0020\u0020\u0020\n\u0020\u0020print('Accuracy\u0020of\u0020the\u0020model\u0020on\u0020the\u0020test\u0020dataset:\u0020{}%'.format(100\u0020*\u0020correct\u0020/\u0020total))
原文地址: https://www.cveoy.top/t/topic/pvyl 著作权归作者所有。请勿转载和采集!