迁移学习,添加 Keras LSTM 层,(热狗,而不是使用二进制交叉熵的热狗)



训练特征,形状(1032,5,5,122880(,进入LSTM层。 这将产生"值错误:输入 0 与图层 lstm_16 不兼容:预期的 ndim=3,找到 ndim=2">

1032 是训练样本数

5x5x122880 是训练样本的瓶颈特征

model = Sequential()
    model.add(CuDNNLSTM(2048,input_shape=train_final_model.shape[:1))
model.add(Dense(2, activation='sigmoid'))

似乎 Keras ValueError 告诉我,在通过 LSTM 层运行训练瓶颈特征之前,我应该重塑它们。 但这样做:

training_bottlenecked_features = np.reshape(train_final_model, (1032,25,122880))
print(training_bottlenecked_features.shape)
final_model.add(LSTM(2,input_shape=training_bottlenecked_features.shape[:1]))

产生这个:

(1032, 25, 122880(

"值错误:输入 0 与图层 lstm_23 不兼容:预期 ndim=3,找到 ndim=2">

我已经尝试了其他几种组合的输入,所以我觉得我可能缺少 Keras LSTM 文档中的一些基本内容: https://keras.io/layers/recurrent/感谢您的任何见解。

事实证明,LSTM和RNN依赖于使用keras.layers.TimeDistributed。 这需要最低限度地重组训练和验证标签维度(例如,使用 np.expand_dims(((。

如果使用 TimeDistributed 包装整个顺序流,则可能还需要重塑训练和验证数据。

此处的对话框有助于回忆重复出现的网络体系结构差异:https://github.com/keras-team/keras/issues/1029

回想起来,我希望我能从这里开始阅读:https://keras.io/layers/wrappers/

最新更新