【发布时间】:2019-09-30 19:33:32
【问题描述】:
我是 tensorflow 的新手,我正在尝试获得函数的二阶导数,但是如果一阶导数变为常数,则二阶导数变为 None 而不是 0。
据我了解,这是因为没有计算图将常数从一阶导数链接到任何变量,因此它变为“无”。但我不明白如何解决这个问题。我也不明白为什么这种情况下的导数并不总是 0,从数学上讲,将其设置为 0 而不是 None 更有意义。
这是我为解决问题而运行的代码:
x_val = np.linspace(0,1,n)
x = K.variable(x_val,dtype='float64',name='x')
y_val = np.linspace(0,1,n)
y = K.variable(y_val,dtype='float64',name='y')
z = x**2 + y + 1
g = K.gradients(z,[x,y])
g2 = K.gradients(g,[x,y])
print(K.eval(g2[0])) #Works
print(K.eval(g2[1])) #Gradient is None, can't be evaluated
【问题讨论】:
标签: python tensorflow keras gradient