返回状态Keras-多变量输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回状态Keras-多变量输出相关的知识,希望对你有一定的参考价值。

参考return state部分的这篇博客:https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/

我正在尝试实现一个多变量(预测2输出 - y1y2stateful LSTM模型。这是片段:

## defining the model
def my_model():
    input_x = Input(batch_shape=(batch_size, look_back, x_train.shape[2]), name='input')
    drop = Dropout(0.5)

    lstm_1, state_h, state_c = LSTM(50, return_sequences=False,batch_input_shape=(batch_size, look_back, x_train.shape[2]),return_state=True)(input_x)
    lstm_1_drop = drop(lstm_1)

    y1 = Dense(1, activation='linear', name='op1')(lstm_1_drop)
    y2 = Dense(1, activation='linear', name='op2')(lstm_1_drop)

    model = Model(inputs=input_x, outputs=[y1,y2])

    optimizer = Adam(lr=0.0005, decay=0.00001)
    model.compile(loss='mse', optimizer=optimizer,metrics=['mse'])
    model.summary()
    return model

model = my_model()

history = model.fit(x_train, [y_11_train,y_22_train], epochs=1, batch_size=batch_size, verbose=0, shuffle=False)

我在这里有一些问题:我不确定它是否已在此处正确实施,因为我没有按照博客中的说明在lstm_1, state_h, state_coutputs中提供Model(),因为这里我有两个不同的预测,而不是1博客。

如果我必须在lstm_1, state_h, state_coutputs中喂Model(),它如何实施以及它将如何影响model.fit部分。

任何帮助将受到高度赞赏。

谢谢

答案

阅读Blog帖子似乎作者确实在输出中实现了state_h来调查lstm层的内部。这样的输出对于已经训练过的网络是有用的,但不适用于训练。

对于培训,您可以安全地将信息留在输出中。如果您想在预测期间获得信息,只需定义第二个模型:

model = Model(inputs=input_x, outputs=[y1,y2,state_h,state_c])

然后Keras将重复使用您已经训练过的图层,并在输出中获得信息,而不必担心您的训练。

以上是关于返回状态Keras-多变量输出的主要内容,如果未能解决你的问题,请参考以下文章

Keras 多输入、多输出、多loss模型构建

如何处理keras中多变量LSTM的多步时间序列预测

什么是使用Keras的RNN Layer的return_state输出

如何在Keras训练LSTM的初始状态?

如何在 Keras 中重置状态变量?

多输出自定义keras ResNet50模型; ValueError:图表已断开连接