tensorflow-底層梯度(2)

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018
@author: myhaspl
"""

import tensorflow as tf
x = tf.constant(1.)
a = 12*x
b = 2*a
c = 3*b
g1 = tf.gradients([a + b + c], [a, b, c])
g2 = tf.gradients([a + b + c], [a, b, c],stop_gradients=[a, b, c])

sess=tf.Session()
with sess:

    print sess.run(g1)
    print sess.run(g2)

[9.0, 4.0, 1.0]
[1.0, 1.0, 1.0]
與全導數g1 = tf.gradients([a + b + c], [a, b, c])相比,偏導數g2 = tf.gradients([a + b + c], [a, b, c],stop_gradients=[a, b, c])
的值是[1.0,1.0 , 1.0],而全導數g1 = tf.gradients([a + b + c], [a, b, c])考慮了a對b和c的影響,並求值爲[9.0, 4.0, 1.0],例如:

(a+b+c)'a=9,其中:

b=2*a

c=3b=32*a=6a

相比於在圖構造期間使用的tf.stop_gradient。stop_gradients提供了已經構造完圖之後停止梯度的方法,當將這兩種方法結合起來時,反向傳播在tf.stop_gradient節點和stop_gradients節點處都停止,無論首先遇到哪個節點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章