質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Q&A

1回答

2942閲覧

PytorchのRuntime errorについて

rikubon_

総合スコア39

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

0グッド

0クリップ

投稿2020/10/20 03:26

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

時間がたっているので解決されているかもしれませんが・・・。
軽くソースコードを検索したところ、以下のサイトがヒットしたのですが、
https://megane-man666.hatenablog.com/entry/pytorch
こちらのコードの通りにこちらの環境で確認したところ、特に問題なく最後まで走りました。
記載頂いているコードと異なるところもないようですし、記載頂いている場所以外に起因するエラーだと思います。
エラーコードを見る限り、train_xかtrain_yのshapeが間違ってそうなので、記載頂いたコードの前の部分を再度確認してみてください。
pytorchに限りませんが、こういったshapeの違いによるエラーは頻繁に出くわします。疑わしい部分のshapeをprintしたりなど、細かくトラブルシューティングする力は必要になってくると思いますので、頑張って下さい。

投稿2020/10/27 01:11

Ryomax

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問