返回状态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不应成为模型中的培训目标。这看起来更像是作者想要在进一步的用例中提到它们。在您想要进行的端到端培训中,您不需要在输出中使用它们。我发布的代码仅适用于您希望在培训后查看这些状态的情况。你的训练应该是完全正确的。