PaddlePaddle / models

Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
Apache License 2.0
6.91k stars 2.91k forks source link

variational_seq2seq inference error #5207

Closed nickyoungforu closed 3 years ago

nickyoungforu commented 3 years ago

in models/PaddleNLP/legacy/seq2seq/variational_seq2seq/ run sh infer.sh ptb it shows:

Error Message Summary:

InvalidArgumentError: Dims of all Inputs(X) must be the same, but received input 1 dim is:320096, 1 not equal to input 0 dim:32, 1. [Hint: Expected input_dims[i] == input_dims[0], but received input_dims[i]:320096, 1 != input_dims[0]:32, 1.] at (/paddle/paddle/fluid/operators/stackop.cc:46) [operator < stack > error] in model.py
outputs,
= dynamic_decode( beam_search_decoder, inits=dec_initial_states, max_step_num=max_length)

iclementine commented 3 years ago

这个需要使用 padddlepaddle 1.6 来运行. 新版在 shape 上的要求发生了一些变化.

nickyoungforu commented 3 years ago

这个需要使用 padddlepaddle 1.6 来运行. 新版在 shape 上的要求发生了一些变化.

请问是对dynamic_decode的inits的shape要求变了吗? 我看基于2.0版本的代码 https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleNLP/examples/text_generation/vae-seq2seq里面跟这里的好像看不出什么区别,对dec_initial_states的定义是类似的

https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleNLP/examples/text_generation/vae-seq2seq/model.py下: dec_first_hidden_cell = self.fc(latent_z) dec_first_hidden, dec_first_cell = paddle.split( dec_first_hidden_cell, 2, axis=-1) if self.num_layers > 1: dec_first_hidden = paddle.split(dec_first_hidden, self.num_layers) dec_first_cell = paddle.split(dec_first_cell, self.num_layers) else: dec_first_hidden = [dec_first_hidden] dec_first_cell = [dec_first_cell] dec_initial_states = [[h, c] for h, c in zip(dec_first_hidden, dec_first_cell)]

https://github.com/PaddlePaddle/models/blob/release/2.0-beta/PaddleNLP/legacy/seq2seq/variational_seq2seq/model.py下: dec_first_hidden_cell = layers.fc(latent_z, 2 self.hidden_size self.num_layers, name='fc_hc') dec_first_hidden, dec_first_cell = layers.split(dec_first_hidden_cell, 2) if self.num_layers > 1: dec_first_hidden = layers.split(dec_first_hidden, self.num_layers) dec_first_cell = layers.split(dec_first_cell, self.num_layers) else: dec_first_hidden = [dec_first_hidden] dec_first_cell = [dec_first_cell] dec_initial_states = [[h, c] for h, c in zip(dec_first_hidden, dec_first_cell)]

iclementine commented 3 years ago

看起来是 stack 里面的 tensor 的形状不尽相同.

可能是更前面的 op 的计算结果出现了不符合预期的行为. 你是在用 1.6 来运行吗?

nickyoungforu commented 3 years ago

看起来是 stack 里面的 tensor 的形状不尽相同.

可能是更前面的 op 的计算结果出现了不符合预期的行为. 你是在用 1.6 来运行吗?

你好,我现在是1.8的环境,我想在不换版本的前提下跑通这份代码。请问这个应该怎么debug? 之前在paddle答疑群里有同学告诉我应该跑这份代码:https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleNLP/examples/text_generation/vae-seq2seq/ 那这份代码在2.0下应该是通的吧。两份代码进入decode前的逻辑看上去好像没什么区别。

iclementine commented 3 years ago

我们 debug 主要靠打印形状来看是否符合要求。但是建议先用 1.6 版本来运行。因为跨版本的一些差异范围可能需要看 release note 才清楚。

ZeyuChen commented 3 years ago

@nickyoungforu 可否试用下我们最新的2.0版本的vae-seq2seq? https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleNLP/examples/machine_translation/seq2seq https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleNLP/examples/text_generation/vae-seq2seq 欢迎使用我们的新版本继续给提反馈意见。

LiuChiachi commented 3 years ago

@nickyoungforu hello,解决方法建议是先把这一行unsqueeze函数去掉,sample_output_layer变成下面这样:

sample_output_layer = lambda x: layers.unsqueeze(fluid.one_hot(
      layers.sampling_id(
          layers.softmax(
              layers.squeeze(output_layer(x),[1])
          ),dtype='int'),
          depth=self.tar_vocab_size), [1])
LiuChiachi commented 3 years ago

同时建议使用我们2.0版本的模型,都是基于PaddlePaddle2.0开发的,会比之前的版本更好用~~

nickyoungforu commented 3 years ago

同时建议使用我们2.0版本的模型,都是基于PaddlePaddle2.0开发的,会比之前的版本更好用~~

嗯嗯 之前已经解决 忘记close了 感谢回复 会尝试2.0版本