首页 > 解决方案 > 检查输入时出错:预期 lstm_input 有 3 个维度,但得到了形状为 (5, 10) 的数组

问题描述

import numpy as np
from tensorflow.python.keras.layers import Input, Dense
from keras.models import Sequential
from keras.layers import Dense
import tensorflow as tf
import tensorflow 
from tensorflow import keras
from keras.layers import Dense

x = np.stack([np.random.choice(range(10), 10, replace=False) for _ in range(5)])
y = np.stack([np.random.choice(range(10), 10, replace=False) for _ in range(5)])
model = keras.models.Sequential()
model.add(keras.layers.LSTM(16, activation='relu', input_shape=(5,10), return_sequences=False))
model.add(keras.layers.Dense(12,  activation='relu'))
model.add(keras.layers.Dense(10, activation='sigmoid')) 
model.compile(optimizer='adam', loss='binary_crossentropy')
model.fit(x,y)

我的输入和输出形状是 (5, 10),维度是 2。当我尝试执行上面的代码时,会出现以下错误消息: ValueError: Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (5, 10)

标签: pythondeep-learninglstm

解决方案


对于 LSTM,您的输入大小应为 3:[batch_size, nb_timesteps, nb_features]。input_shape 参数指定每个实例的大小,即 [nb_timesteps, nb_features],但 lstm 期望实例批次,因此您发送的张量应该有一个额外的 batch_size 维度,如 [batch_size, 5, 10]


推荐阅读