我可以训练RNN的初始隐藏状态来表示模型的初始条件吗?

时间:2019-12-19 02:36:34

标签: tensorflow keras deep-learning time-series pytorch

我有一些与生物反应器有关的时间序列数据。我每隔24小时将葡萄糖喂入生物反应器中,并测量自上次喂食以来它产生了多少物质。

输入:葡萄糖饲料。

输出:物质的生产。

目标:在我喂了葡萄糖的情况下,随时间推移估算这些物质的浓度。

此生物反应器具有某些初始条件,例如葡萄糖和物质的初始浓度。每个实验都有不同的初始条件。在一个实验中,我可以从10mM的物质开始,而在另一个实验中,我可以从100mM的物质开始,因此知道起点很重要。

我想利用这个初始条件来训练RNN的初始隐藏状态。

Model

反正我能做到吗?如果不是,是否还有其他方法可以向RNN表达初始条件?我在Keras中使用python。谢谢!

在代码中,我相信它看起来像这样:

from tensorflow.keras.layers import Input, Dense, LSTM
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam

input_layer = Input(shape=(16,3))
hidden_state_dim = 7

mlp_inp = Input(batch_shape=(hidden_state_dim,1))
mlp_dense_h = Dense(hidden_state_dim, activation='relu')(mlp_inp)
mlp_dense_c = Dense(hidden_state_dim, activation='relu')(mlp_inp)

x = LSTM(7, return_sequences = True)(input_layer, initial_state=[mlp_dense_h, mlp_dense_c])

model = Model(input_layer, x)

但是我收到ValueError:图形断开。可能是因为没有向mlp_dense_h / c的反向传播。

2 个答案:

答案 0 :(得分:1)

您收到错误的原因是您没有将 mlp_inp 作为输入之一合并到“模型”中。以下修改后的代码可以正常工作:

from tensorflow.keras.layers import Input, Dense, LSTM
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from keras.utils import plot_model

input_layer = Input(shape=(16,3))
hidden_state_dim = 7

mlp_inp = Input(batch_shape=(hidden_state_dim,1))
mlp_dense_h = Dense(hidden_state_dim, activation='relu')(mlp_inp)
mlp_dense_c = Dense(hidden_state_dim, activation='relu')(mlp_inp)

x = LSTM(7, return_sequences = True)(input_layer, initial_state=[mlp_dense_h, mlp_dense_c])

model = Model(inputs=[input_layer, mlp_inp], outputs=x) # Here is the change
plot_model(model, to_file='IC.png')

enter image description here

我目前正在研究与您类似的 RNN 问题。也许我们可以讨论更多关于这个感兴趣的问题。

答案 1 :(得分:0)

如果使用 RNN ,则

Initial_state参数不是问题的初始状态。您的初始状态是特定于域的。对于RNN,初始状态是模型隐藏状态的初始值。如果要在深度学习模型中映射域的初始状态,则需要找到初始条件与输出之间的相关性,以及时间序列数据变化与输出之间的相关性。

我建议您尝试执行以下步骤-

  1. 使用RNN模型或更好的RNN自动编码器将时间序列数据作为输入和输出(无初始条件)。
  2. 训练此模型并获取中间状态作为时间序列数据的紧凑表示形式。
  3. 将此表示形式与您的初始状态值连接起来,并建立前馈网络,将输入作为时间序列表示形式与初始状态和输出作为结果值(即物质生产)相连接。
  4. 训练此网络。

您可能需要调整模型以提高准确性,例如增加自动编码器中间层的大小,在一个或两个模型中添加/删除层,添加正则化等。

如果您遇到任何问题,请告诉我。