我有这个功能来获得它的差异化价值。
def dp1_f1(x):
return 64*x*(1-x)*(math.pow((1-2*x),2) )*math.pow((1-8*x+8*x*x), 2)
我想获得dy/dx
价值。我可以通过数值方法得到这个值,如下所示:
def dp_numeric_diff(x):
delta_x = 0.0001
return (dp1_f1(x+delta_x)-dp1_f1(x))/delta_x
我使用 TensorFlow Eager Execution API 来计算这个值:
def dp_ad_tfe(x):
tf.enable_eager_execution()
tfe = tf.contrib.eager
grad_lx = tfe.gradients_function(dp1_f1)
x = 3.0
y = dp1_f1(x)
rst = grad_lx(x)
return y, rst[0]
我用下面的代码调用这个函数:
numeric_diff = dp_numeric_diff(x)
print('Numeric method:{0}'.format(numeric_diff))
v, d = dp_ad_tfe(x)
print('TFE:{0}'.format(d))
它将显示如下内容:
Numeric method:-75290405.66440672
TFE:-19208000.0
我确信数字方法是正确的。我的 TensorFlow 急切执行代码有什么问题?顺便说一句,相同的 TensorFlow 急切执行代码可以为像 x^2 这样的简单函数得到正确答案。