为了账号安全,请及时绑定邮箱和手机立即绑定

Python CNN LSTM(值误差步长应为 1、1 或 3 但实际为 2)

Python CNN LSTM(值误差步长应为 1、1 或 3 但实际为 2)

拉风的咖菲猫 2022-12-14 20:48:09
我一直在尝试在 mnist 数据集上训练一个 convlstm 模型,以拓宽我在模型开发方面的知识。我无法逃避我在标题中包含的错误。任何帮助或提示表示赞赏!我知道步幅的默认值是 (1,1) 但不确定 2 是如何设置的。import tensorflow as tffrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, LSTM, CuDNNLSTM, TimeDistributed, Reshapefrom keras.utils import to_categoricalfrom keras.layers.convolutional import Conv2D, Conv3Dfrom keras.layers.pooling import MaxPooling2D, MaxPool3Dfrom keras.layers.core import Flattendef prep_pixels(train, test):    # convert from integers to floats    train_norm = train.astype('float32')    test_norm = test.astype('float32')    # normalize to range 0-1    train_norm = train_norm / 255.0    test_norm = test_norm / 255.0    # return normalized images    return train_norm, test_normmnist = tf.keras.datasets.mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()x_train = x_train.reshape((x_train.shape[0], 28, 28, 1))x_test = x_test.reshape((x_test.shape[0], 28, 28, 1))y_train = to_categorical(y_train)y_test = to_categorical(y_test)x_train, x_test = prep_pixels(x_train, x_test)model = Sequential()model.add(TimeDistributed(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))))model.add(TimeDistributed((MaxPooling2D((2, 2)))))model.add(TimeDistributed(Flatten()))model.add(LSTM(32, activation='relu', return_sequences=True))model.add(Dropout(0.2))model.add(Dense(10, activation='softmax'))opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])model.fit(x_train, y_train, epochs=1, validation_data=(x_test, y_test))错误model.fit(x_train, y_train, epochs=1, validation_data=(x_test, y_test))strides = _get_sequence(strides, n, channel_index, "strides")ValueError:步幅应该是长度 1、1 或 3 但实际是 2
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您似乎还没有为 ConvLSTM 创建窗口数据集。所以你可能想在打电话之前这样做model.fit


d_train = tf.keras.preprocessing.sequence.TimeseriesGenerator(x_train, y_train, length=5, batch_size=64) # window size = 5

d_test = tf.keras.preprocessing.sequence.TimeseriesGenerator(x_test, y_test, length=5)

model.fit(d_train, epochs=1, validation_data=d_test)

为了与您的损失函数保持一致,您需要禁用返回序列(或添加另一个不返回序列的层)。


model.add(tf.keras.layers.LSTM(32, activation='relu', return_sequences=False))


查看完整回答
反对 回复 2022-12-14
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信