2017-03-17 10 views
4

私は以下のコードを持っています。なぜtensor.view()がpytorchで動作していないのですか?

embedded = self.embedding(input).view(1, 1, -1) 
embedded = self.drop(embedded) 
print(embedded[0].size(), hidden[0].size()) 
concatenated_output = torch.cat((embedded[0], hidden[0]), 1) 

最後の行で次のようなエラーが表示されます。

RuntimeError: inconsistent tensor sizes at /data/users/soumith/miniconda2/conda-bld/pytorch-0.1.9_1487344852722/work/torch/lib/THC/generic/THCTensorMath.cu:141

テンソルの形状をライン番号で印刷しているときに注意してください。 3、私は次の出力を取得しています。

torch.size([1, 300]) torch.size([1, 1, 300]) 

なぜ私はview(1, 1, -1)として表示方法を使用しているにもかかわらずembeddedテンソルのため[1, 300]形状を取得していますか?

助けていただけたら幸いです!

+0

'self.dropとは何ですか?' 'self.drop'関数を呼び出す前に埋め込みサイズを印刷できますか? – Kashyap

+0

の埋め込みサイズは同じです。 self.dropはドロップアウト層です。 –

+2

その場合、 'print(embedded.size())'は '[1、1、300]'を返します。 'print(embedeed [0] .size)'を印刷しているので、これは '[1、300]'になります。これらの形状を仮定すると、torch.catの操作を実行できなくなります。連結したい次元に沿って同じサイズを持つ必要があります – Kashyap

答えて

2

embeddedは3dテンソルであり、hiddenは、各要素が3dテンソルである2つの要素(隠れ状態およびセル状態)のタプルであった。 hiddenはLSTMレイヤの出力です。 PyTorchでは、LSTMは隠れ状態[h]とセル状態[c]をタプルとして返し、エラーを混乱させました。

したがって、コードの最後の行を次のように更新し、問題を解決しました。

concatenated_output = torch.cat((embedded, hidden[0]), 1) 
関連する問題