LSTM - 进行预测时输入中的 Matmul 错误

Posted

技术标签:

【中文标题】LSTM - 进行预测时输入中的 Matmul 错误【英文标题】:LSTM - Matmul error in input while making prediction 【发布时间】:2020-02-16 21:06:23 【问题描述】:

我正在尝试使用 Keras 训练单步 LSTM 模型。但是,当我调用预测函数时,出现以下错误:

InvalidArgumentError: cannot compute MatMul as input #0 was expected to be a float tensor but is a double tensor [Op:MatMul] name: lstm_5/MatMul/

我的输入形状是 (250, 7, 3)

下面是模型的配置和总结:

single_step_model = tf.keras.models.Sequential()
single_step_model.add(tf.keras.layers.LSTM(7,
                                           input_shape=x_train_single.shape[-2:]))
single_step_model.add(tf.keras.layers.Dense(1))

single_step_model.compile(loss='mae', optimizer=tf.train.RMSPropOptimizer(learning_rate=0.001), metrics=['accuracy'])

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_5 (LSTM)                (None, 7)                 308       
_________________________________________________________________
dense_5 (Dense)              (None, 1)                 8         
=================================================================
Total params: 316
Trainable params: 316
Non-trainable params: 0
_________________________________________________________________

请帮助我

【问题讨论】:

这个错误看起来很简单;您是否尝试过将张量转换为tf.float32 是的,我将我的 numpy 数组转换为 float32,它解决了问题。 InvalidArgumentError: cannot compute MatMul as input #0(zero-based) was expected to be a float tensor but is a double tensor [Op:MatMul]的可能重复 【参考方案1】:

为了社区的利益,在此(答案)部分提及解决方案,即使它出现在评论部分。

问题在于input 的数据类型。默认情况下,tensorflow keras 模型需要float32,但您传递的是double

您可以更改模型的 dtype,如下面的代码所示:

def make_model():
    net = tf.keras.Sequential()
    net.add(tf.keras.layers.Dense(4, activation='relu', dtype='float32'))
    net.add(tf.keras.layers.Dense(4, activation='relu'))
    net.add(tf.keras.layers.Dense(1))
    return net

或将输入更改为float32。更改inputX = X.astype('float32')

【讨论】:

以上是关于LSTM - 进行预测时输入中的 Matmul 错误的主要内容,如果未能解决你的问题,请参考以下文章

LSTM时间序列预测学习

Keras 中的 LSTM 序列预测只输出输入的最后一步

如何使用有状态 LSTM 模型进行预测,而不指定与我训练时相同的 batch_size?

如何使用加载的LSTM注意模型对输入进行预测?

如何使用Keras LSTM与word嵌入来预测单词id

使用 Tensorflow 进行 LSTM 单步预测