ValueError: not enough values to unpack (expected 2, got 1)

来源:互联网 发布:cad截图软件 编辑:程序博客网 时间:2024/06/01 09:36
Traceback (most recent call last):
  File "main_batch.py", line 202, in <module>
    main(my_args)
  File "main_batch.py", line 139, in main
    run_loss = train(args, Encoder, Decoder, en_hidden,de_hidden, train_batch, en_optimizer, de_optimizer, criterion) 
  File "main_batch.py", line 51, in train
    results = Decoder(out_sents_, en_hidden)  
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 206, in __call__
    result = self.forward(*input, **kwargs)
  File "/users4/zsun/graduation_design/nnet/decoder.py", line 37, in forward
    output, de_hidden = self.rnn_cell(output, de_hidden)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 206, in __call__
    result = self.forward(*input, **kwargs)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 91, in forward
    output, hidden = func(input, self.all_weights, hx)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/_functions/rnn.py", line 343, in forward
    return func(input, *fargs, **fkwargs)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/autograd/function.py", line 202, in _do_forward
    flat_output = super(NestedIOFunction, self)._do_forward(*flat_input)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/autograd/function.py", line 224, in forward
    result = self.forward_extended(*nested_tensors)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/_functions/rnn.py", line 285, in forward_extended
    cudnn.rnn.forward(self, input, hx, weight, output, hy)
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/backends/cudnn/rnn.py", line 195, in forward
    hx, cx = hx

ValueError: not enough values to unpack (expected 2, got 1)

将代码:

self.rnn_cell = nn.LSTM(input_size = input_dim,
hidden_size  = hidden_dim,
num_layers = num_layers,
dropout=dropout,
batch_first=True,
bidirectional=False)

改为:

self.rnn_cell = nn.GRU(input_size = input_dim,
hidden_size  = hidden_dim,
num_layers = num_layers,
dropout=dropout,
batch_first=True,
bidirectional=False)

后,报错:

Traceback (most recent call last):
  File "main_batch.py", line 202, in <module>
    main(my_args)
  File "main_batch.py", line 139, in main
    run_loss = train(args, Encoder, Decoder, en_hidden,de_hidden, train_batch, en_optimizer, de_optimizer, criterion) 
  File "main_batch.py", line 51, in train
    results = Decoder(out_sents_, en_hidden)  
  File "/users4/zsun/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 206, in __call__
    result = self.forward(*input, **kwargs)
  File "/users4/zsun/graduation_design/nnet/decoder.py", line 40, in forward
    output = nn.LogSoftmax(self.out(output[0]))
TypeError: __init__() takes 1 positional argument but 2 were given

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

原因是:

lstm的每一个单元,即每一步传播,都需要Ct-1和Ht-1,需要两个隐藏层参数,

而此处只有hidden一个H,所以会报错

ValueError: not enough values to unpack (expected 2, got 1) 

gru的每一个单元,即每一步传播,只需要Ht-1,所以不会出现此错误。


对于第二个错误:

TypeError: __init__() takes 1 positional argument but 2 were given

改为:  

def __init__(self, 。。。):中加入self.LSoftmax = nn.LogSoftmax()

调用变为:output = self.LSoftmax(a)

错误解决。

ValueError: not enough values to unpack (expected 2, got 1)
阅读全文
0 0