首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能训练RNN的初始隐藏状态来表示我的模型的初始条件吗?

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

Stack Overflow用户
提问于 2019-12-19 02:36:34
回答 2查看 513关注 0票数 2

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

输入:葡萄糖饲料。

Ouput:物质的生产。

目的:考虑到我摄入的葡萄糖,估计这些物质的浓度随时间的推移。

该生物反应器具有一定的初始条件,如葡萄糖初始浓度和物质。每个实验都有不同的初始条件。在一个实验中,我可以从10毫米的物质开始,在另一个实验中,我可以从100毫米开始,所以知道起点是很重要的。

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

有我能做到的吗?如果没有,是否有其他方法向RNN表示初始条件?我在Keras中使用python。谢谢!

在代码中,我相信它应该是这样的:

代码语言:javascript
复制
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_稠密_h/c的反向传播。

EN

回答 2

Stack Overflow用户

发布于 2021-01-06 21:17:58

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-20 10:55:28

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

我建议你试试以下步骤-

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59402595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档