返回状态Keras-多变量输出

返回状态Keras-多变量输出,keras,deep-learning,lstm,Keras,Deep Learning,Lstm,请参阅返回状态部分中的此博客: 我正在尝试实现一个多变量(预测2个输出-y1和y2)statefulLSTM模型。以下是片段: ## 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 = LS

请参阅
返回状态
部分中的此博客:

我正在尝试实现一个多变量(预测2个输出-
y1
y2
stateful
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)
问题

我这里有一些问题:我不确定它是否在这里得到了正确的实现,因为我没有在
Model()
输出中输入
lstm\u 1,state\u h,state\u c
,正如在博客中所解释的,因为这里我有两个不同的预测,而不是博客中所述的1

如果我必须在
Model()
输出中输入
lstm\u 1、state\u h、state\u c
Model.fit
部分中输入

我们将非常感谢您的帮助


感谢阅读这篇博文,作者似乎确实在输出中实现了state_h来调查lstm层的内部。这样的输出可以用于已经训练过的网络,但不能用于训练

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

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

然后,Keras将重用您已经训练过的图层,您可以在输出中获得信息,而无需担心您的训练。

Hi@dennis ec感谢您的评论。如果我理解正确,我现在将有两个模型,
model1=Model(输入=输入,输出=[y1,y2])
model2=Model(输入=输入,输出=[y1,y2,状态h,状态c])
model1
用于
模型。fit
model2
用于
model2。预测(x_测试,批次大小=批次大小)
。它会给我所需的有状态输出再次感谢您的输入。您的model.fit应该很好。如果我正确理解博文,则表示lstm的内部表示形式state_h和state_c不应成为模型中的培训目标。这看起来更像是作者想要在进一步的用例中提到它们。在您想要进行的端到端培训中,您不需要在输出中使用它们。我发布的代码仅适用于您希望在培训后查看这些状态的情况。你的训练应该是完全正确的。