【发布时间】:2016-04-20 13:23:59
【问题描述】:
在哪里可以找到 Tensorflow (python API) 中的反向传播(通过时间)代码?还是使用了其他算法?
例如,当我创建一个 LSTM 网络时。
【问题讨论】:
标签: python tensorflow backpropagation
在哪里可以找到 Tensorflow (python API) 中的反向传播(通过时间)代码?还是使用了其他算法?
例如,当我创建一个 LSTM 网络时。
【问题讨论】:
标签: python tensorflow backpropagation
TensorFlow 中的所有反向传播都是通过自动区分网络前向传递中的操作,并添加显式操作来计算网络中每个点的梯度来实现的。通用实现可以在tf.gradients() 中找到,但使用的特定版本取决于您的 LSTM 是如何实现的:
tf.gradients() 中的算法在相反方向构建展开的反向传播循环。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 的时间序列。
【讨论】: