问一下关于AdamOptimizer的两个问题

来源:3-4 卷积神经网络实战

会边缘ob的码农

2019-07-17

请问在AdamOptimizer中,是如何针对不同的损失函数进行求导,来梯度下降的呢?
还有就是在下面这段程序里是如何实现反向传播来更新参数的呢?
with tf.Session() as sess:
sess.run(init)
for i in range(train_steps):
batch_data, batch_labels = train_data.next_batch(batch_size)
loss_val, acc_val, _ = sess.run([loss, accuracy, train_op],
feed_dict={ x: batch_data,y: batch_labels})

写回答

1回答

正十七

2019-07-18

AdamOptimizer是利用反向传播去求导的,虽然遇到的损失函数不同,但所有的损失函数其实都是可以求导的,既然可以求导,那么就可以利用链式法则一步步求解下去。

在tensorflow中,求导的细节我们是可以不用关心的,但简单来说,它的原理是在tensorflow的图结构的每个节点上都建立一个求导节点,接收当前节点的输入和输出来为之求导。

代码中的求导是train_op来实现的,run了train_op就会发生求导和参数更新操作。

0
1
会边缘ob的码农
谢谢老师的解答,也就是说在tensorflow里是内置有求导的算法的,可以一步步拆分变量进行求导工作,然后把求导的任务下放到每个节点,在各个节点上分别进行梯度下降,而使用sess.run(train_op)则是来触发这一过程,对各层的参数进行更新
2019-07-18
共1条回复

深度学习之神经网络(CNN/RNN/GAN)算法原理+实战

深度学习算法工程师必学,深入理解深度学习核心算法CNN RNN GAN

2617 学习 · 935 问题

查看课程