如何将RGB图像输入LSTM网络?input_shape设置报错求助
解决LSTM输入图片时的input_shape设置问题
首先明确:LSTM网络要求输入是三维张量,格式为(样本数, 时间步长, 特征数),而你现在的图片是四维张量(None, 224, 224, 3)(None代表批量大小,224×224是图片尺寸,3是RGB通道数),维度不匹配;同时你设置的input_shape=(224,224)既没考虑通道数,也不符合LSTM的维度要求,所以触发报错。
给你两种实用的调整方案:
方案一:以图片的行(或列)作为时间步
把每张图片的224行看作224个时间步,每行的224个像素×3个通道作为该时间步的特征,这样输入形状会变成(样本数, 224, 224×3),对应设置input_shape=(224, 224×3)。
代码示例(Keras框架):
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense # 假设你的数据已加载为shape=(300, 224, 224, 3)的张量 # 调整形状:将通道维度合并到特征维度 x_train = tf.reshape(x_train, (300, 224, 224*3)) # 定义LSTM模型 model = Sequential([ LSTM(64, input_shape=(224, 224*3)), # 这里设置正确的input_shape Dense(10, activation='softmax') # 示例为10分类任务,可按需修改 ]) model.summary()
方案二:展平图片后拆分时间步
如果不需要保留行/列的空间结构,可以先把每张图片展平成一维向量(224×224×3=150528个特征),再拆分成固定数量的时间步。比如拆成128个时间步,每个时间步包含1176个特征(150528÷128=1176),输入形状变为(300, 128, 1176),对应input_shape=(128, 1176)。
代码示例:
# 展平后拆分时间步(需确保总特征数能被时间步整除) x_train = tf.reshape(x_train, (300, 128, 1176)) model = Sequential([ LSTM(64, input_shape=(128, 1176)), Dense(10, activation='softmax') ])
注意:方案一更能保留图片的空间局部信息,通常效果更好,优先推荐。
内容的提问来源于stack exchange,提问作者bahar asakere
相关产品推荐
相关产品推荐

