返回状态Keras-多元输出

时间:2018-11-08 14:47:07

标签: keras deep-learning lstm

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_c的{​​{1}}中的outputs来填充Model()博客,因为在这里我有两个不同的预测,而不是博客中所述的1。

如果我必须在lstm_1, state_h, state_c的{​​{1}}中输入outputs,将如何实施它以及如何影响Model()部分。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

在阅读Blog帖子时,似乎作者确实在输出中实现了state_h来研究lstm层的内部。这样的输出对于已经训练有素的网络可能有用,但对于训练没有用。

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

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

然后,Keras将重用您已经受过训练的图层,并且您的输出中将包含信息,而无需担心您的训练。