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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

自然言語処理

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

Q&A

0回答

2439閲覧

PytorchのRNNモジュールによるmany-to-manyの実装方法について

fury00812

総合スコア4

PyTorch

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

自然言語処理

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

0グッド

0クリップ

投稿2019/09/16 12:44

前提・実現したいこと

torch.nn.RNN(LSTMではなく)を用いて系列ラベリングモデルを作成したいのですが、lossの計算の方法が分かりません。
タイプステップ毎にそれぞれCrossEntropyLossを計算し、総和を計算してパラメータ更新したいのですが、どのように実装するのでしょうか?

以下のように書いてみたのですが、エラーが発生しました。

該当のソースコード

python

1# Bidirectional recurrent neural network 2class BiRNN(nn.Module): 3 def __init__(self, input_size, hidden_size, num_layers, num_classes): 4 super(BiRNN, self).__init__() 5 self.hidden_size = hidden_size 6 self.num_layers = num_layers 7 self.embedding = nn.Embedding(word_vocab_size, word_vec_size, padding_idx=0) 8 self.rnn = nn.RNN(input_size, hidden_size, num_layers, bidirectional=True) 9 self.linear = nn.Linear(hidden_size*2, num_classes) 10 11 def forward(self, input, hidden): 12 input_embedded = self.embedding(input) # [batch_size * seq_len * vector_size] 13 input_embedded = torch.transpose(input_embedded, 0, 1) # [seq_len * batch_size * vector_size] 14 output, hidden = self.rnn(input_embedded, hidden) 15 output = self.linear(output) 16 output = F.softmax(output, dim=2) 17 return output, hidden

python

1batch_size = 5 2seq_len = 20 3hidden_size=200 4model = BiRNN(input_size=300, hidden_size=hidden_size, num_layers=2, num_classes=7) 5input = torch.randn(batch_size, seq_len) # input data 6label = torch.randn(seq_len, batch_size) # label data 7h0 = torch.randn(4, batch_size, hidden_size) 8output, hidden = model(batch, h0) # 疑問:このoutput,hiddenは最終状態のもの?? 9 10criterion = nn.CrossEntropyLoss() 11optimizer = torch.optim.Adam(model.parameters(), lr=0.1) 12loss = criterion(output, label) # ERROR

発生している問題・エラーメッセージ

ValueError: Expected target size (20, 7), got torch.Size([20 , 5])

各タイムステップ(t0~t19)の出力に対してそれぞれ正解ラベルと比較しlossをかけるには、どのような実装が必要なのでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問