检查输入时出错:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 (72, 768)

Posted

技术标签:

【中文标题】检查输入时出错:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 (72, 768)【英文标题】:Error when checking input: expected lstm_1_input to have shape (71, 768) but got array with shape (72, 768) 【发布时间】:2020-07-19 01:08:54 【问题描述】:

我正在加载形状为 ((23094, 71, 768), (23094, 19, 282)) 的预训练模型。

当我传递形状为 (29116, 72, 768) 的新 X 值时,它在检查输入时显示错误:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 ( 72, 768)。

这是我的模型摘要: 型号:“sequential_1”


图层(类型)输出形状参数#

lstm_1 (LSTM) (无, 71, 256) 1049600


lstm_2 (LSTM) (无, 71, 64) 82176


lstm_3 (LSTM) (无, 32) 12416


dense_1(密集)(无,5358)176814


reshape_1 (重塑) (无, 19, 282) 0


activation_1(激活)(无、19、282)0

总参数:1,321,006 可训练参数:1,321,006 不可训练参数:0


【问题讨论】:

【参考方案1】:

LSTM 需要一个 3D 数组(批量大小、时间步长、特征)。有很多方法可以使用可变时间长度进行训练(维度 = 1,在您的情况下为 71)。

在您的情况下,样本大小 = 23094、23094(这不需要匹配)

时间维度 = 71 != 19(如果您有可变的输入长度并且在一个批次中所有输入的长度相同,这可能会有所不同,但在您的模型摘要中,时间维度固定为 71 而不是无,因此您必须使用 71 个时间维度进行训练)

特征维度 = 768 != 282(必须相同)

只需使用零填充来匹配形状https://www.tensorflow.org/api_docs/python/tf/keras/layers/ZeroPadding2D

另外,提供完整代码以获得基于代码的答案。

【讨论】:

你好 furcifer,这是链接colab.research.google.com/drive/… 在与数据共享 colab 笔记本时需要授予访问权限或公开。

以上是关于检查输入时出错:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 (72, 768)的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)

ValueError:检查输入时出错:预期 lstm_16_input 有 3 个维度,但得到的数组形状为 (836, 400, 3, 1)

检查输入时出错:预期 lstm_input 有 3 个维度,但得到的数组形状为 (4, 1)

ValueError:检查输入时出错:预期dense_1_input的形状为(180,),但数组的形状为(1,)

检查输入时出错:预期 lstm_input 有 3 个维度,但得到了形状为 (160, 1000) 的数组

检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组