Tensorflow 中的反向传播(通过时间)代码

Backpropagation (through time) code in Tensorflow

我在哪里可以找到 Tensorflow 中的反向传播(通过时间)代码 (python API)?还是使用了其他算法?

例如,当我创建一个 LSTM 网络时。

TensorFlow中的所有反向传播都是通过自动微分网络前向传播中的操作来实现的,并添加显式操作来计算网络中每个点的梯度。一般实现可以在 tf.gradients() 中找到,但使用的特定版本取决于您的 LSTM 是如何实现的:

  • 如果 LSTM 实现为有限时间步长的展开循环,通常的方法是通过时间截断反向传播,它使用 tf.gradients() 中的算法在相反方向构建展开的反向传播循环.
  • 如果 LSTM 实现为 tf.while_loop(),它会使用额外的支持来区分 control_flow_grad.py 中的循环。

我不确定,但这可能有用:

由于 RNN 可以像前馈网络一样进行训练,因此代码非常相似。 这就是训练前馈网络的方式:(X 是输入)

train = tf.train.GradientDescentOptimizer(learning_rate).minimize(error)

# Session
sess = tf.Session()
sess.run(tf.initialize_all_variables())

for i in range(epochs):
    sess.run(train, feed_dict={X: [[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels: [[0], [1], [1], [0]]})

时间反向传播的唯一区别是现在每个时期都有一个嵌套的时间循环

这是训练简单 rnn 的代码:

train = tf.train.GradientDescentOptimizer(learning_rate).minimize(error)

time_series = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
for i in range(number_of_epochs):
    for j in range(len(time_series) - 1):
        curr_X = time_series[j+1]
        curr_prev = time_series[j]
        lbs = curr_prev
        sess.run(train, feed_dict={X: [[curr_X]], prev_val: [[curr_prev]], labels: [[lbs]]})

在这段代码中,rnn 学习了一个包含 1 和 0 的时间序列。