use*_*_12 4 python python-3.x lstm tensorflow tensorflow2.0
我想将自定义初始状态传递给 lstm 输出,但我只有一个隐藏状态,因此如何传递零初始状态。
from tensorflow.keras import layers
x = layers.Input((None,))
x = layers.Embedding(....)(x)
x = layers.Flatten()(x)
imp_vec = Dense()(x)
Run Code Online (Sandbox Code Playgroud)
现在我想使用 imp_vec 作为隐藏的初始状态并将其传递给解码器 lstm
out, states = layers.LSTM(...., return_state=True)(inputs, initial_state=[imp_vec])
Run Code Online (Sandbox Code Playgroud)
上面的代码返回值错误:,
ValueError: An `initial_state` was passed that is not compatible with `cell.state_size`. Received `state_spec`=ListWrapper([InputSpec(shape=(None, 200), ndim=2)]); however `cell.state_size` is [10, 10]
Run Code Online (Sandbox Code Playgroud)
我发现 lstm 需要两个状态作为初始状态(即 hidden_state、cell_state)对吗?但我只有一个隐藏状态向量将它传递给模型,所以我如何只初始化 hidden_state 并使 lstm 自动用零初始化另一个?
LSTM 有两个状态,但您只传递一个输入。因此有几个选择
LSTM
使用GRU
GRU 只有一种状态并且initial_state=imp_vec
可以正常工作。
而不是单个imp_vec
,创建imp_vec_1
并将imp_vec_2
其传递为,
layers.LSTM(..)(..., initial_state=[imp_vec_1, imp_vec_2])
Run Code Online (Sandbox Code Playgroud)
请记住,LSTM
层TAKSh_state
和c_state
的顺序。
c_state
为零如果您不想传递,c_state
只需传递一组零。
zero_out = layers.Lambda(lambda x: tf.zeros_like(x))(imp_vec)
layers.LSTM(..)(..., initial_state=[imp_vec, zero_out])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1550 次 |
最近记录: |