Tensorflow:修改隐藏状态的计算
Tensorflow: Modify Calculation of Hidden State
我想稍微修改在 LSTM 的每个时间步计算(并因此重新输入)的隐藏状态。例如,向常规 LSTM 过程产生的隐藏状态添加一个常量向量这样简单的事情。我不打算修改常规门机制——我更多地将其视为对通常由 LSTM 创建的最终隐藏状态的计算。我觉得创建自己的 LSTM 单元有点过头了。或者,OutputProjectionWrapper
似乎可以实现这个目标,虽然我不打算创建新的输出,只是修改隐藏状态。
如果您使用 for 循环处理您的序列,您可以在时间步之间修改 LSTM 的状态,因为 TensorFlow 中的 RNN 单元有两个参数:新输入和隐藏状态:
lstm = rnn_cell.BasicLSTMCell(lstm_size)
initial_state = state = tf.zeros([batch_size, lstm.state_size])
with tf.variable_scope("RNN"):
for time_step in range(num_steps):
if time_step > 0: tf.get_variable_scope().reuse_variables()
# modify the state
modified_state = state + 1
output, state = lstm(words[:, i], modified_state)
final_state = state
我想稍微修改在 LSTM 的每个时间步计算(并因此重新输入)的隐藏状态。例如,向常规 LSTM 过程产生的隐藏状态添加一个常量向量这样简单的事情。我不打算修改常规门机制——我更多地将其视为对通常由 LSTM 创建的最终隐藏状态的计算。我觉得创建自己的 LSTM 单元有点过头了。或者,OutputProjectionWrapper
似乎可以实现这个目标,虽然我不打算创建新的输出,只是修改隐藏状态。
如果您使用 for 循环处理您的序列,您可以在时间步之间修改 LSTM 的状态,因为 TensorFlow 中的 RNN 单元有两个参数:新输入和隐藏状态:
lstm = rnn_cell.BasicLSTMCell(lstm_size)
initial_state = state = tf.zeros([batch_size, lstm.state_size])
with tf.variable_scope("RNN"):
for time_step in range(num_steps):
if time_step > 0: tf.get_variable_scope().reuse_variables()
# modify the state
modified_state = state + 1
output, state = lstm(words[:, i], modified_state)
final_state = state