为 keras 中的 LSTM 单元提供输入 API
Providing inputs to LSTM cell in keras API
我正在阅读深度学习中的 LSTM。来自 Andrew Ng 教授的 LSTM 课程,每个 LSTM 单元的三个输入。
输入是前一个单元的单元状态,即 "c" 上标 (t-1) 和 LSTM 单元的输出 "a" 上标 (t-1) 和输入 x 上标 (t) .
LSTM 单元的输出是当前单元状态,即 "c" 上标 (t) 和 LSTM 单元的输出 "a" 上标 (t)。
我们如何为上述输入的 keras 中的 LSTM 单元传递初始化参数?
感谢您的帮助。简单的例子会有帮助。
默认情况下,您不必为 keras 中的 LSTM 层指定初始状态。
如果你想指定初始状态,你可以这样做 LSTM(units)(input, initial_state)
,其中 initial_state
是一个张量列表 [hidden_state, cell_State]
。 hidden_state
和 cell_state
分别由您的符号 "a" 上标 (t-1) 和 "c" 上标 (t-1)。每个事件都有一个隐藏状态和一个细胞状态,因此在训练时每个形状应该是(batch_size, units)
.
下面是关于如何在 tf.keras
中执行此操作的最小工作示例(在 keras
中应该相同,但尚未测试代码)
from tensorflow import keras
import numpy as np
n_features=3
n_timelag=10
n_pred=1
batch_size=32
lstm_size=30
# make initial state
single_hidden_state=np.random.random(lstm_size)
single_cell_state=np.random.random(lstm_size)
# clone for each batch
hidden_state=np.tile(single_hidden_state,(batch_size,1))
cell_state=np.tile(single_cell_state,(batch_size,1))
# numpy to tensorflow constant
initial_state=[keras.backend.constant(hidden_state),keras.backend.constant(cell_state)]
# create training data
X=np.random.random((batch_size,n_timelag,n_features))
Y=np.random.random((batch_size,n_pred))
# create network
inp=keras.Input((n_timelag,n_features))
lstm_l1=keras.layers.LSTM(lstm_size)(inp, initial_state=initial_state)
pred = keras.layers.Dense(n_pred)(lstm_l1)
# create model
model = keras.models.Model(inputs=inp, outputs=pred)
model.compile(loss='mse', optimizer='adam')
# train model
model.fit(X,Y)
有关如何在 keras 中处理 LSTM 初始状态和序列到序列的更多信息,请参阅 this link
我正在阅读深度学习中的 LSTM。来自 Andrew Ng 教授的 LSTM 课程,每个 LSTM 单元的三个输入。
输入是前一个单元的单元状态,即 "c" 上标 (t-1) 和 LSTM 单元的输出 "a" 上标 (t-1) 和输入 x 上标 (t) .
LSTM 单元的输出是当前单元状态,即 "c" 上标 (t) 和 LSTM 单元的输出 "a" 上标 (t)。
我们如何为上述输入的 keras 中的 LSTM 单元传递初始化参数?
感谢您的帮助。简单的例子会有帮助。
默认情况下,您不必为 keras 中的 LSTM 层指定初始状态。
如果你想指定初始状态,你可以这样做 LSTM(units)(input, initial_state)
,其中 initial_state
是一个张量列表 [hidden_state, cell_State]
。 hidden_state
和 cell_state
分别由您的符号 "a" 上标 (t-1) 和 "c" 上标 (t-1)。每个事件都有一个隐藏状态和一个细胞状态,因此在训练时每个形状应该是(batch_size, units)
.
下面是关于如何在 tf.keras
中执行此操作的最小工作示例(在 keras
中应该相同,但尚未测试代码)
from tensorflow import keras
import numpy as np
n_features=3
n_timelag=10
n_pred=1
batch_size=32
lstm_size=30
# make initial state
single_hidden_state=np.random.random(lstm_size)
single_cell_state=np.random.random(lstm_size)
# clone for each batch
hidden_state=np.tile(single_hidden_state,(batch_size,1))
cell_state=np.tile(single_cell_state,(batch_size,1))
# numpy to tensorflow constant
initial_state=[keras.backend.constant(hidden_state),keras.backend.constant(cell_state)]
# create training data
X=np.random.random((batch_size,n_timelag,n_features))
Y=np.random.random((batch_size,n_pred))
# create network
inp=keras.Input((n_timelag,n_features))
lstm_l1=keras.layers.LSTM(lstm_size)(inp, initial_state=initial_state)
pred = keras.layers.Dense(n_pred)(lstm_l1)
# create model
model = keras.models.Model(inputs=inp, outputs=pred)
model.compile(loss='mse', optimizer='adam')
# train model
model.fit(X,Y)
有关如何在 keras 中处理 LSTM 初始状态和序列到序列的更多信息,请参阅 this link