1. ホーム
  2. 機械学習

ValueError: 解凍する値が足りない (期待値 2、取得値 1)

2022-02-23 01:06:13
トレースバック (最新のコールバック)。



  ファイル "main_batch.py", 行 202, in <module>



    main(my_args)



  ファイル "main_batch.py", 行 139, in main



run_loss = train(args, エンコーダー, デコーダー, en_hidden,de_hidden, train_batch, en_optimizer, de_optimizer, criterion) 



  ファイル "main_batch.py", 行 51, in train



  results = Decoder(out_sents_, en_hidden)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", 行 206, in __call__.



    result = self.forward(*input, **kwargs)



  ファイル "/users4/zsun/graduation_design/nnet/decoder.py", 行 37, in forward



    output, de_hidden = self.rnn_cell(output, de_hidden)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", 行 206, in __call__.



    result = self.forward(*input, **kwargs)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/rnn.py", ライン 91, in forward



    output, hidden = func(input, self.all_weights, hx)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/_functions/rnn.py", 行 343, in forward



    return func(input, *fargs, **fkwargs)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/autograd/function.py", 行 202, in _do_forward



    flat_output = super(NestedIOFunction, self). _do_forward(*flat_input)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/autograd/function.py", 行 224, in forward



    result = self.forward_extended(*nested_tensors)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/_functions/rnn.py", 行 285, in forward_extended



    cudnn.rnn.forward(self, input, hx, weight, output, hy)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/backends/cudnn/rnn.py", 行 195, in forward



    hx, cx = hx



ValueError: 解凍する値が足りません (期待値 2、取得値 1)

コードを入れてください。

self.rnn_cell = nn.LSTM(input_size = input_dim,



hidden_size = hidden_dim,



num_layers = num_layers,



dropout=ドロップアウト。



batch_first=True とする。



bidirectional=False)



に変更します。

self.rnn_cell = nn.GRU(input_size = input_dim,



hidden_size = hidden_dim,



num_layers = num_layers,



dropout=ドロップアウト。



batch_first=True とする。



bidirectional=False)



エラーが報告された後

トレースバック (最も最近の呼び出し):



  ファイル "main_batch.py", 行 202, in <module>



    main(my_args)



  ファイル "main_batch.py", 行 139, in main



  run_loss = train(args, エンコーダー, デコーダー, en_hidden,de_hidden, train_batch, en_optimizer, de_optimizer, criterion) 



  ファイル "main_batch.py", 行 51, in train



results = Decoder(out_sents_, en_hidden)



  ファイル "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", 行 206, in __call__.



    result = self.forward(*input, **kwargs)



  ファイル "/users4/zsun/graduation_design/nnet/decoder.py", 行 40, in forward



出力 = nn.LogSoftmax(self.out(出力[0]))



TypeError: __init__() は 1 つの位置引数を取りますが、2 つが与えられました。


##############################################

理由

lstmの各セル、すなわち伝搬の各ステップには、Ct-1、Ht-1と2つの隠れ層パラメータである

そして、ここではHしか隠されていないので、エラーが報告されます。

ValueError: 解凍する値が足りない(期待値2、取得値1) 

gruの各単位、すなわち伝播の各ステップはHt-1だけでよいので、このエラーは発生しない。







2つ目のエラーの場合。

TypeErrorです。__init__() は位置引数を1つ取るが、2つ与えられていた

に変更します。 

def __init__(self, ...) self.LSoftmax = nn.LogSoftmax() を追加して :

呼び出しは次のようになります: output = self.LSoftmax(a)

エラーが解決されました。

ValueError: 解凍する値が足りない (期待値 2、取得値 1)