: FloatClassNLLCriterion_updateOutput 인수의 잘못된 조합을 받았다 - (INT, torch.FloatTensor, torch.FloatTensor! torch.FloatTensor 가지고 : 형식 오류!을 , 토치 .FloatTensor 입력, 토치 .LongTensor 목표, torch.FloatTensor 출력, bool 크기 평균, [torch.FloatTensor 가중치 또는 없음], torch.FloatTensor total_weight, bool, NoneType, torch.FloatTensor, int) int ignore_index)이 줄의 : 손실 = 기준 (outputs, one_hot_target).Pytorch FloatClassNLLCriterion_updateOutput 오류
여러 가지 시도를하고 웹을 검색했지만 내 실수를 찾지 못하는 것 같습니다. 누군가 아이디어가 있습니까? 사용
코드 :
class Net(nn.Module):
def _init_(self,input_size,hidden_size, num_classes):
super(Net, self)._init_()
self.l1 = nn.Linear(input_size,hidden_size)
self.l2 = nn.Linear(hidden_size,num_classes)
def forward(self,x):
x = self.l1(x)
x = F.tanh(x)
x = self.l2(x)
x = F.softmax(x)
return x
mlp = Net(input_size,hidden_size,num_classes)
criterion = nn.NLLLoss()
optimizer = torch.optim.SGD(mlp.parameters(), lr=learning_rate)
for i in range(N-1,len(word_list)):
# Define input vector x
x = None
for j in range(0,N-1):
try:
x = np.r_[x,w2v[word_list[j]]]
except:
x = w2v[word_list[j-N+1]]
# Done with defining x
np.reshape(x,(len(x),1))
x = autograd.Variable(torch.FloatTensor(x))
optimizer.zero_grad()
outputs = mlp(x)
outputs = outputs.unsqueeze(0)
outputs = outputs.transpose(0,1)
index = w2i[word_list[i]]
one_hot_target = np.zeros([num_classes,1],dtype=float)
one_hot_target[index] = float(1)
one_hot_target = autograd.Variable(torch.Tensor(one_hot_target))
print (one_hot_target)
loss = criterion(outputs,one_hot_target)
#loss.backward()
#optimizer.step()
감사합니다. 그러나 다음과 같은 오류 메시지가 표시되지 않습니다. RuntimeError : /opt/conda/conda-bld/pytorch_1503970438496/work/torch/lib/THNN/generic/ClassNLLCriterion.c:22에서 다중 대상이 지원되지 않습니다. 어떻게이 문제를 해결했는지 알 겠어? – Stefan1993
내 생각 엔'one_hot_target'은 1- 핫 벡터 표현을 포함하고있을 것입니다. 그러나 올바른 클래스의 인덱스를 전달해야합니다. – blckbird