Eager Execution

介紹 Eager Execution 模式下的梯度計算,廢話不多說,直接上圖

1,gradients_function

gradients_function
def square(x):
    return x ** 2
print(square(3.))

grad = tfe.gradients_function(square)  
print(grad(3.))

grad = tfe.value_and_gradients_function(square)
print(grad(3.))

def f(x, y):
    return x ** 2 + y ** 2
print(f(2., 3.))

grad = tfe.gradients_function(f)  
print(grad(2., 3.))

grad = tfe.value_and_gradients_function(f)
print(grad(2., 3.))

2,implicit_function

implicit_function
x = tfe.Variable(initial_value = 2.0, name = 'x')
y = tfe.Variable(initial_value = 3.0, name = 'y')
print(x.numpy())

def loss(y):
    return (y - x ** 2) ** 2
print(loss(7).numpy())

grad = tfe.implicit_gradients(loss)
print(grad(7.))

grad = tfe.implicit_value_and_gradients(loss)
print(grad(7.))

x = tfe.Variable(initial_value = 2.0, name = 'x')
y = tfe.Variable(initial_value = 3.0, name = 'y')
z = tfe.Variable(initial_value = 3.0, name = 'z')
print(x)

def loss(y):
    return (y - x ** 2 + z ** 2) ** 2
print(loss(7).numpy())

grad = tfe.implicit_gradients(loss)
print(grad(7.))

grad = tfe.implicit_value_and_gradients(loss)
print(grad(7.))

在看一個用 Eager Execution寫的回歸時,看到看到求導(dǎo)函數(shù)里面嵌套一個函數(shù),所以有一個示例如下

3.PNG
w = tfe.Variable(initial_value = 3.0, name = 'w')
b = tfe.Variable(initial_value = 3.0, name = 'b')

def aa(x):
    return w * x + b

def bb(model, x, y):
    return tf.pow(model(x) - y, 2)

grad = tfe.implicit_gradients(bb)
print(grad(aa, 2, 2))

grad = tfe.implicit_value_and_gradients(bb)
print(grad(aa, 2, 2))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容