在return state
部分中参考此博客:
https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/
我正在尝试实现多元模型(预测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)
问题
我这里有一些问题:我不确定在这里是否已正确实施,因为我没有按照lstm_1, state_h, state_c
的{{1}}中的outputs
来填充Model()
博客,因为在这里我有两个不同的预测,而不是博客中所述的1。
如果我必须在lstm_1, state_h, state_c
的{{1}}中输入outputs
,将如何实施它以及如何影响Model()
部分。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
在阅读Blog帖子时,似乎作者确实在输出中实现了state_h来研究lstm层的内部。这样的输出对于已经训练有素的网络可能有用,但对于训练没有用。
对于培训,您可以安全地将信息保留在输出中。 如果您想在预测过程中获得信息,只需定义第二个模型:
model = Model(inputs=input_x, outputs=[y1,y2,state_h,state_c])
然后,Keras将重用您已经受过训练的图层,并且您的输出中将包含信息,而无需担心您的训练。