titanicのデータでPytorchの練習をしていたところ学習でエラーが出てしまいました。
訓練データ(train_x):(891,13)
訓練ラベル(train_y):(891,1)
テストデータ(test_x):(418,13) の大きさで下記のコードを書きました。
試したこととして訓練ラベルをTensorに変換してみたりもしましたがエラーは変わりませんでした。改善策はありますでしょうか?
Python
1train_x = torch.Tensor(data_x.values) 2train_y = torch.LongTensor(data_y.values) 3test_x = torch.Tensor(test.values) 4 5optimizer = optim.SGD(model.parameters(), lr=0.02) 6train_loss = [] 7train_accu = [] 8i = 0 9 10model.train() #学習モードに切り替え 11 12for epoch in range(2000): # 数字は適当 13 data, target = Variable(train_x), Variable(train_y) 14 optimizer.zero_grad() 15 output = model(data) 16 17 loss = F.nll_loss(output, target) 18 loss.backward() 19 train_loss.append(loss.data.item()) 20 optimizer.step() 21 22 prediction = output.data.max(1)[1] 23 accuracy = prediction.eq(target.data).sum().numpy() / len(train_x) 24 train_accu.append(accuracy) 25 26 if i % 10 == 0: 27 print('Train Step: {}\tLoss: {:.3f}\tAccuracy: {:.3f}'.format(i, loss.data.item(), accuracy)) 28 i += 1 29 30print('Train Step: {}\tLoss: {:.3f}\tAccuracy: {:.3f}'.format(i, loss.data.item(), accuracy)) 31 32model.eval() #推論モードに切り替え 33outputs = model(Variable(test_x)) 34_, predicted = torch.max(outputs.data, 1) 35
そして以下のエラーが出ました
Error
1RuntimeError Traceback (most recent call last) 2<ipython-input-161-57d29f49e986> in <module> 3 11 output = model(data) 4 12 5---> 13 loss = F.nll_loss(output, target) 6 14 loss.backward() 7 15 train_loss.append(loss.data.item()) 8 9~/opt/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py in nll_loss(input, target, weight, size_average, ignore_index, reduce, reduction) 10 2216 .format(input.size(0), target.size(0))) 11 2217 if dim == 2: 12-> 2218 ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) 13 2219 elif dim == 4: 14 2220 ret = torch._C._nn.nll_loss2d(input, target, weight, _Reduction.get_enum(reduction), ignore_index) 15 16RuntimeError: 1D target tensor expected, multi-target not supported 17
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。