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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

1回答

9525閲覧

IndexError: Target 2 is out of bounds.について

rikubon_

総合スコア39

PyTorch

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2020/08/12 01:36

自分のデータでRNNを試してみたいなと思い、調べていたところ、このサイトを見つけてやってみました。参考にしたサイトのデータと僕のデータとの違いはcsvファイルであることと0,1分類ではなく,0,1,2,3の多値分類でまずは試しにと思い、torchtextのドキュメントを読んでcsvファイルでのやり方でデータを読み込みました。そして参考コードからコードを写経をして自分はimport torch.functional as Fとしていたんですがなぜかsoftmax is no attribute F と出てしまったのでnn.functional.softmaxと表記したり、view関数をreshapeに変えたりしてなんと関数でエラーが出ることはなくなりました。しかし、最後の学習の際にこのエラーが出てしまいました。改善策はありますでしょうか?

参考にしたコード

python3

1def train_model(epoch, train_iter, optimizer, log_interval=1, batch_size=2): 2 encoder.train() 3 classifier.train() 4 correct = 0 5 for idx, batch in enumerate(train_iter): 6 (x, x_l), y = batch.Text, batch.Label 7 optimizer.zero_grad() 8 encoder_outputs = encoder(x) 9 output, attn = classifier(encoder_outputs) 10 loss = nn.functional.nll_loss(output, y) 11 loss.backward() 12 optimizer.step() 13 pred = output.data.max(1, keepdim=True)[1] 14 correct += pred.eq(y.data.view_as(pred)).cpu().sum() 15 if idx % log_interval == 0: 16 print('train epoch: {} [{}/{}], acc:{}, loss:{}'.format( 17 epoch, (idx+1)*len(x), len(train_iter)*batch_size, 18 correct/float(log_interval * len(x)), 19 loss.data[0])) 20 correct = 0 21 22 23def test_model(epoch, test_iter): 24 encoder.eval() 25 classifier.eval() 26 correct = 0 27 for idx, batch in enumerate(test_iter): 28 (x, x_l), y = batch.Text, batch.Label 29 encoder_outputs = encoder(x) 30 output, attn = classifier(encoder_outputs) 31 pred = output.data.max(1, keepdim=True)[1] 32 correct += pred.eq(y.data.view_as(pred)).cpu().sum() 33 print('test epoch:{}, acc:{}'.format(epoch, correct/float(len(test)))) 34 35emb_dim = 300 #単語埋め込み次元 36h_dim = 3 #lstmの隠れ層の次元 37class_num = 2 #予測クラウ数 38lr = 0.001 #学習係数 39epochs = 50 #エポック数 40 41 # make model 42encoder = EncoderRNN(emb_dim, h_dim, len(TEXT.vocab),gpu=False, v_vec = TEXT.vocab.vectors) 43classifier = AttnClassifier(h_dim, class_num) 44 45# init model 46def weights_init(m): 47 classname = m.__class__.__name__ 48 if hasattr(m, 'weight') and (classname.find('Embedding') == -1): 49 nn.init.xavier_uniform(m.weight.data, gain=nn.init.calculate_gain('relu')) 50 51for m in encoder.modules(): 52 print(m.__class__.__name__) 53 weights_init(m) 54 55for m in classifier.modules(): 56 print(m.__class__.__name__) 57 weights_init(m) 58 59# optim 60from itertools import chain 61optimizer = optim.Adam(chain(encoder.parameters(),classifier.parameters()), lr=lr) 62 63for epoch in range(epochs): 64 train_model(epoch + 1, train_iter, optimizer) 65 test_model(epoch + 1, val_iter) 66 67

error

1~/opt/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py in nll_loss(input, target, weight, size_average, ignore_index, reduce, reduction) 2 2216 .format(input.size(0), target.size(0))) 3 2217 if dim == 2: 4-> 2218 ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) 5 2219 elif dim == 4: 6 2220 ret = torch._C._nn.nll_loss2d(input, target, weight, _Reduction.get_enum(reduction), ignore_index) 7 8IndexError: Target 2 is out of bounds.

文字制限により最初の方は記載できませんでした。

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

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

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

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

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

guest

回答1

0

classの数を変更することで解決するはずです。
class_num = 2
ではなく、
実際の数に変更してみてください

投稿2020/08/12 03:19

Hyugopython

総合スコア148

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

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

rikubon_

2020/08/12 04:26

ありがとうございます!試してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問