Keras.backend.gradients дает None вместо нуля - PullRequest
0 голосов
/ 30 сентября 2019

Я новичок в tenorflow и пытаюсь получить вторую производную функции, однако, если первая производная становится постоянной, вторая производная становится 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

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете попытаться изменить g2 следующим образом:

g2_correct = [g2_elem if g2_elem is not None else K.zeros_like(var) for var, grad_2 in zip(vars, g2)]

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...