yanwii / dynamic-seq2seq

seq2seq中文聊天机器人
336 stars 136 forks source link

想改用自己的训练数据时 出现InvalidArgumentError,不知道是什么原因 #14

Closed SkylerHuang closed 6 years ago

SkylerHuang commented 6 years ago

假如把语料库改成你的5000句的 即:python prepare_dialog.py 5000 再进行训练 python seq2seq.py retrain 出现这个错误 InvalidArgumentError (see above for traceback): logits and labels must have the same first dimension, got logits shape [2800,5970] and labels shape [2860] [[Node: sequence_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](sequence_loss/Reshape, sequence_loss/Reshape_1)]]

请问这是什么问题?

yanwii commented 6 years ago

https://github.com/yanwii/dynamic-seq2seq/blob/8358ffd794f9b4838a54e30266dd42eacda560e7/dynamic_seq2seq_model.py#L172 默认问答最大长度差在10倍以内,你可以将10调大

SkylerHuang commented 6 years ago

@yanwii 谢谢,在关闭问题中已经发现问题所在了

xiaoming0217 commented 6 years ago

@yanwii 你好 我用自己的数据训练模型 也出现这个问题,问题描述如下: InvalidArgumentError (see above for traceback): logits and labels must have the same first dimension, got logits shape [240,1516] and labels shape [260] [[Node: sequence_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT32, _device="/job:localhost/replica:0/task:0/device:GPU:0"](sequence_loss/Reshape, sequence_loss/Reshape_1/_509)]]

我修改了这个参数 (原来是20),比如30,还是报改错误,请问是什么原因呢,非常感谢。

yanwii commented 6 years ago

因为decoder是支持变长的,但这个长度需要我们手动指定
maximum_iterations = tf.round(tf.reduce_max(self.encoder_inputs_length) * 10) 可以看到最大迭代次数是encoder最大长度的10倍, 说明你的decoder输出比encoder最大长度的10(30)倍还要打,这就造成了在计算loss的时候不能对齐,解决方法就是调大点,或者控制decoder的长度,当然也可以在计算loss的时候进行对齐操作。