我有一些与生物反应器有关的时间序列数据。我每隔24小时将葡萄糖喂入生物反应器中,并测量自上次喂食以来它产生了多少物质。
输入:葡萄糖饲料。
输出:物质的生产。
目标:在我喂了葡萄糖的情况下,随时间推移估算这些物质的浓度。
此生物反应器具有某些初始条件,例如葡萄糖和物质的初始浓度。每个实验都有不同的初始条件。在一个实验中,我可以从10mM的物质开始,而在另一个实验中,我可以从100mM的物质开始,因此知道起点很重要。
我想利用这个初始条件来训练RNN的初始隐藏状态。
反正我能做到吗?如果不是,是否还有其他方法可以向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的反向传播。
答案 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')
我目前正在研究与您类似的 RNN 问题。也许我们可以讨论更多关于这个感兴趣的问题。
答案 1 :(得分:0)
Initial_state
参数不是问题的初始状态。您的初始状态是特定于域的。对于RNN,初始状态是模型隐藏状态的初始值。如果要在深度学习模型中映射域的初始状态,则需要找到初始条件与输出之间的相关性,以及时间序列数据变化与输出之间的相关性。
我建议您尝试执行以下步骤-
您可能需要调整模型以提高准确性,例如增加自动编码器中间层的大小,在一个或两个模型中添加/删除层,添加正则化等。
如果您遇到任何问题,请告诉我。