【问题标题】:ValueError: strides should be of length 1, 1 or 3 but was 2ValueError:步幅的长度应为 1、1 或 3,但为 2
【发布时间】:2019-10-02 17:05:13
【问题描述】:

训练输入形状:(13974, 100, 6, 5)

训练输出形状:(13974, 1,1)

测试输入形状:(3494, 100, 6, 5)

测试输出形状:(3494, 1, 1)

我正在开发以下模型。 2D CNN LSTM。

model = Sequential()
model.add(TimeDistributed(Conv2D(1, (1,1), activation='relu', 
input_shape=(6,5,1))))
model.add(TimeDistributed(MaxPooling2D(pool_size=(6, 5))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(units=300, return_sequences= False, input_shape=(100,1)))
model.add(Dense(1))

当我尝试按照以下方式进行调整时

model.fit(train_input,train_output,epochs=50,batch_size=60)

它给了我一个错误。

ValueError: strides 的长度应为 1、1 或 3,但为 2

请更正我的模型。我正在将 6,5 图像转换为单个单元,并从 100 个时间戳中预测第 101 个时间戳。

【问题讨论】:

    标签: image-processing keras conv-neural-network lstm keras-layer


    【解决方案1】:

    您的问题很不清楚,但我相信您有 100 张大小为 6 x 5 的图像序列。最好将 Conv3D 合并到您的用例中,而且没有必要在任何地方都有 TimeDistributed。这只是您的用例的说明,您可能需要添加更多层 ConvMaxPool 并尝试其他超参数以获得良好的拟合。

    # Add the channel dimension in input
    train_input = np.expand_dims(train_input, -1)
    # Remove the extra dimension in output
    train_output = np.reshape(train_output, (-1, 1))
    
    model = Sequential()
    model.add(Conv3D(1, (1,1,1), activation='relu', input_shape=(100, 6,5, 1)))
    model.add(MaxPooling3D(pool_size=(6, 5, 1)))
    model.add(Reshape((16, 5)))
    model.add(LSTM(units=300, return_sequences= False))
    model.add(Dense(1))
    

    【讨论】:

    • 感谢您的回复我正在制作一个模型来预测 6*5 图像的 100 个时间戳并输出为 6*1 我将最后一个密集更改为 Dense(6) 是否 lstm 获得100 个时间戳的输入并预测输出。
    猜你喜欢
    • 2019-11-25
    • 2020-12-29
    • 2020-09-17
    • 2016-02-17
    • 2021-05-24
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多