LSTM处理MNIST数据集的特征与时间步设置疑问
嘿,我懂你想用LSTM练手MNIST的想法,不过这里有个关键细节得调整下——你对MNIST图像的重塑方式其实没贴合LSTM的序列输入逻辑哦!
针对MNIST的LSTM输入调整建议
- 先对齐LSTM输入与MNIST的结构:MNIST是28×28的灰度图,更合理的做法是把每一行像素当成一个时间步,这样时间步数量是28,每个时间步的特征数就是28(对应每一行的像素点)。这样输入形状应该是
(28, 28),而不是把整个图像拉成1×784的一维向量。 - 为什么要这么改?:LSTM的优势是处理序列数据,把图像的行看作序列的“逐帧”内容,相当于让模型“逐行读取”图像,能保留图像的空间结构信息。如果拉成1×784,那时间步变成784、特征数只有1,这样的序列对图像识别来说毫无意义,反而浪费了图像本身的结构特征。
- 代码调整示例:
假设你原本的重塑代码是x_train = x_train.reshape(-1, 784),那应该改成:
然后在Keras定义LSTM层时,input_shape就设为x_train = x_train.reshape(-1, 28, 28) # -1表示自动推断样本数量,28个时间步,每个步对应28个特征(28, 28):from keras.models import Sequential from keras.layers import LSTM, Dense model = Sequential() model.add(LSTM(units=128, input_shape=(28, 28))) model.add(Dense(10, activation='softmax')) # MNIST是10分类任务 - 关于你提到的
input_shape=(600…:看起来应该是笔误啦,600既不是MNIST图像的时间步合理值,也不是特征数,按照上面的逻辑调整后,输入形状就完全符合LSTM的要求了。
内容的提问来源于stack exchange,提问作者Michele
相关产品推荐
相关产品推荐

