我正在构建一个延时循环模型,我需要知道 TensorFlow 如何以及何时计算其后退步骤。
考虑以下模型和伪代码:
unit_1 = LSTM(unit_size)
unit_2 = LSTM(unit_size)
unit_3 = LSTM(unit_size)
unit_4 = LSTM(unit_size)
ip_W = Variable([4 * unit_size, output_size])
ip_b = Variable([output_size])
prev_1 = tf.zeros([unit_size])
prev_2 = tf.zeros([unit_size])
prev_3 = tf.zeros([unit_size])
prev_4 = tf.zeros([unit_size])
for t, input in enumerate(input_data):
if t%1==0:
prev_1 = unit_1([input])
if t%2==0:
prev_2 = unit_2([input])
if t%3==0:
prev_3 = unit_3([input])
if t%4==0:
prev_4 = unit_4([input])
concat = tf.concat(0,[prev_1, prev_2, prev_3, prev_4])
output[t] = tf.matmul(concat, ip_W) + ip_B
这是此代码可用版本的要点,基于 tensorflow/python/ops/rnn.py
我的问题:
对于未调用单元格的时间步长(即在 T=1 时,调用 unit_0,而其余所有未调用),它们的权重是否更新?我不知道让它们在每个州更新是否是个好主意。细胞本身在步骤中没有接触到任何新数据,所以我担心反向传播可能会导致过度校正。感谢其他人对此的见解。
让我知道是否需要任何澄清。