使用 PyTorch GRU 模型进行文本分类:完整代码示例
import\u0020torch\nimport\u0020torch.nn\u0020as\u0020nn\nimport\u0020torch.optim\u0020as\u0020optim\nfrom\u0020torch.utils.data\u0020import\u0020Dataset, DataLoader\n\n#\u0020Define\u0020the\u0020GRU\u0020model\nclass\u0020GRUModel(nn.Module):\n\u0020\u0020def\u0020__init__(self, input_size, hidden_size, output_size):\n\u0020\u0020\u0020\u0020super(GRUModel, self).init()\n\u0020\u0020\u0020\u0020self.hidden_size\u0020=\u0020hidden_size\n\u0020\u0020\u0020\u0020self.gru\u0020=\u0020nn.GRU(input_size, hidden_size, batch_first=True)\n\u0020\u0020\u0020\u0020self.fc\u0020=\u0020nn.Linear(hidden_size, output_size)\n\u0020\u0020\n\u0020\u0020def\u0020forward(self, x):\n\u0020\u0020\u0020\u0020batch_size\u0020=\u0020x.size(0)\n\u0020\u0020\u0020\u0020hidden\u0020=\u0020self.init_hidden(batch_size)\n\u0020\u0020\u0020\u0020out, \u0020=\u0020self.gru(x, hidden)\n\u0020\u0020\u0020\u0020out\u0020=\u0020self.fc(out[:, -1, :])\n\u0020\u0020\u0020\u0020return\u0020out\n\u0020\u0020\n\u0020\u0020def\u0020init_hidden(self, batch_size):\n\u0020\u0020\u0020\u0020return\u0020torch.zeros(1, batch_size, self.hidden_size)\n\n#\u0020Define\u0020the\u0020dataset\nclass\u0020MyDataset(Dataset):\n\u0020\u0020def\u0020__init_(self, data_file):\n\u0020\u0020\u0020\u0020self.data\u0020=\u0020[]\n\u0020\u0020\u0020\u0020self.labels\u0020=\u0020[]\n\u0020\u0020\u0020\u0020with\u0020open(data_file, 'r')\u0020as\u0020f:\n\u0020\u0020\u0020\u0020\u0020\u0020for\u0020line\u0020in\u0020f:\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020line\u0020=\u0020line.strip().split(',')\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020inputs\u0020=\u0020list(map(float, line[:-1]))\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020label\u0020=\u0020int(line[-1])\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020self.data.append(inputs)\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020self.labels.append(label)\n\u0020\u0020\n\u0020\u0020def\u0020__len__(self):\n\u0020\u0020\u0020\u0020return\u0020len(self.data)\n\u0020\u0020\n\u0020\u0020def\u0020__getitem__(self, index):\n\u0020\u0020\u0020\u0020inputs\u0020=\u0020torch.tensor(self.data[index], dtype=torch.float)\n\u0020\u0020\u0020\u0020label\u0020=\u0020torch.tensor(self.labels[index])\n\u0020\u0020\u0020\u0020return\u0020inputs, label\n\n#\u0020Hyperparameters\ninput_size\u0020=\u002023\nhidden_size\u0020=\u002064\noutput_size\u0020=\u00208\nbatch_size\u0020=\u00204\nnum_epochs\u0020=\u002010\nlearning_rate\u0020=\u00200.001\n\n#\u0020Initialize\u0020the\u0020model\nmodel\u0020=\u0020GRUModel(input_size, hidden_size, output_size)\n\n#\u0020Define\u0020the\u0020loss\u0020function\u0020and\u0020optimizer\ncriterion\u0020=\u0020nn.CrossEntropyLoss()\noptimizer\u0020=\u0020optim.Adam(model.parameters(), lr=learning_rate)\n\n#\u0020Load\u0020the\u0020dataset\ndataset\u0020=\u0020MyDataset('data.txt')\ndataloader\u0020=\u0020DataLoader(dataset, batch_size=batch_size, shuffle=True)\n\n#\u0020Training\u0020loop\nfor\u0020epoch\u0020in\u0020range(num_epochs):\n\u0020\u0020for\u0020inputs, labels\u0020in\u0020dataloader:\n\u0020\u0020\u0020\u0020optimizer.zero_grad()\n\u0020\u0020\u0020\u0020outputs\u0020=\u0020model(inputs)\n\u0020\u0020\u0020\u0020loss\u0020=\u0020criterion(outputs, labels)\n\u0020\u0020\u0020\u0020loss.backward()\n\u0020\u0020\u0020\u0020optimizer.step()\n\u0020\u0020\n\u0020\u0020print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')\n\n#\u0020Save\u0020the\u0020trained\u0020model\ntorch.save(model.state_dict(), 'model.pt')
原文地址: https://www.cveoy.top/t/topic/pvyn 著作权归作者所有。请勿转载和采集!