错误一:
File "D:\anaconda3\envs\PyTorch\lib\site-packages\torch\nn\modules\rnn.py", line 559, in forward
max_batch_size = input.size(0) if self.batch_first else input.size(1)
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
原因: 输入到torch中的数据必须是三维的tensor。
解决方案:
使用torch.unsqueeze()扩充tensor。我的essay本身是64列的一维tensor,且类型为torch.float64.使用两次扩充达到三维,size为[1,1,64]
essay = torch.unsqueeze(essay,0)
essay = torch.unsqueeze(essay,0)
错误二:
File "D:\anaconda3\envs\PyTorch\lib\site-packages\torch\nn\modules\rnn.py", line 576, in forward
result = _VF.lstm(input, hx, self._flat_weights, self.bias, self.num_layers,
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #3 'mat2' in call to _th_addmm_out
原因: 输入到torch中的数据必须是三维torch.float32的tensor
解决方案:在输入到网络之前,将torch.float64类型转化为torch.float32
essay = torch.tensor(essay,dtype=torch.float32)
错误三、四代码为:
label = torch.tensor([label], dtype=torch.long) #int型标签转化为一维tensor
output = rnn(essay)
# output = output.squeeze(0)
loss = loss_fun(output,label)
错误三:
File "D:\anaconda3\envs\PyTorch\lib\site-packages\torch\nn\functional.py", line 2214, in nll_loss
if input.size(0) != target.size(0):
AttributeError: 'int' object has no attribute 'size'
原因: 交叉熵函数是的输入是模型打分结果与实际标签。
解决方案:在rnn最后一层增加softmax()
softmax = nn.Softmax(dim=2)
out = softmax(out)
错误四:
File "D:\anaconda3\envs\PyTorch\lib\site-packages\torch\nn\functional.py", line 2227, in nll_loss
raise ValueError('Expected target size {}, got {}'.format(
ValueError: Expected target size (1, 64), got torch.Size([1])
原因:期望输入为2维,结果输入为1维
解决方案:将三维降至2维。
output = output.squeeze(0)