Input 0 of layer “lstm_1“ is incompatible with the layer: expected ndim=3, found ndim=2. Full shape=

本文详细探讨了在使用TensorFlow LSTM模型进行数据预测时遇到的维度不匹配错误,通过reshape、expand_dims和Lambda函数解决了输入数组维度问题,并提供了可能遇到的新问题及其相应解决方案。
摘要由CSDN通过智能技术生成

本博英文版参见:
[English Version]

1 项目场景

利用TensorFlow的LSTM模型进行预测


2 问题描述

在使用TensorFlow进行数据预测的时候,在
model.fit的时候可能会报形如
Input 0 of layer "lstm_37" is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (16, 7)
的错误

Model.fit(X_train, Y_train, batch_size = BATCH_SIZE, epochs = EPOCHS, shuffle = True, verbose = 1, validation_split = VALIDATION_SPLIT)

3 原因分析

这是由于输入数组的维度不匹配导致的,缺失了一维数据,我们可以通过增维的方法改进这一错误


4 解决方案:

这是原本的输入

X_train = df_1.values

4.1 方法1

通过.reshape()方法改进数组

X_train = X_train.reshape(dimi_x,dim_y,dim_z)

.reshape方法可以直接对数组的维度进行设置来符合模型需要

4.2 方法2

通过np.expand_dims()方法
numpy是一款Python常用的基础数学计算工具

import numpy as np   # 导入numpy基础计算模块(import numpy module)

X_train = np.expand_dims(X_train, axis=0)

通过此方法可以较简便地实现扩维

4.3 方法3

通过Lambda(lambda _:K.expand_dims(_,axis=-1))()实现

import keras.backend as K
from keras.layers import Lambda

X_train = Lambda(lambda d_1:K.expand_dims(X_train,axis=-1))(X_train)

注意:以上三种方法扩维可能会出现新的报错:
ValueError: Input 0 of layer "lstm_43" is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: (None, 63360, 7, 1)
这是因为输入数组因为扩维造成了新的问题,即当前输入维度超过了预期维度3,此时可以尝试删去建模过程中的
input_shape = X_train.shape

4.4 方法4

X_train = X_train[:, None]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值