我是tensorflow的新手,我正在尝试得到函数的二阶导数,但是如果一阶导数变成常数,二阶导数就变成无而不是0。
据我所知,这是因为没有计算图将从一阶导数到任何变量的常量联系起来,因此它变成了“无”。但我不知道如何解决这个问题。我也不明白为什么在这种情况下导数不总是0,从数学上讲,将它设置为0比设置为0更有意义。
下面是我为解决这个问题而运行的代码:
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
发布于 2019-09-30 19:53:20
您可以尝试更改g2
,如下所示:
g2_correct = [g2_elem if g2_elem is not None else K.zeros_like(var) for var, grad_2 in zip(vars, g2)]
参考资料:
joshburkart
回答
https://stackoverflow.com/questions/58174196
复制