请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

问一下关于AdamOptimizer的两个问题

请问在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回答

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 会边缘ob的码农 #1
    谢谢老师的解答,也就是说在tensorflow里是内置有求导的算法的,可以一步步拆分变量进行求导工作,然后把求导的任务下放到每个节点,在各个节点上分别进行梯度下降,而使用sess.run(train_op)则是来触发这一过程,对各层的参数进行更新
    回复 有任何疑惑可以回复我~ 2019-07-18 09:27:26
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号