Я пытаюсь реализовать нейронную сеть с одним скрытым слоем, который может представлять решение для PDE (скажем, уравнения Лапласа).Следовательно, целевая функция зависит от градиента нейронной сети по отношению к ее входу.
Теперь я реализовал вычисление вторых производных, используя лямбда-слои.Однако, когда я пытаюсь вычислить градиент выходных данных относительно параметров модели, я получаю ошибку.
def grad(y, x, nameit):
return Lambda(lambda z: K.gradients(z[0], z[1]), output_shape = [1], name = nameit)([y,x])
def network(i):
m = Dense(100, activation='sigmoid')(i)
j = Dense(1, name="networkout")(m)
return j
x1 = Input(shape=(1,))
a = network(x1)
b = grad(a, x1, "dudx1")
c = grad(b, x1, "dudx11")
model = Model(inputs = [x1], outputs=[c])
model.compile(optimizer='rmsprop',
loss='mean_squared_error',
metrics=['accuracy'])
x1_data = np.random.random((20, 1))
labels = np.zeros((20,1))
model.fit(x1_data,labels)
Это ошибка:
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.
Почему Keras не может вычислить градиенты с обучаемыми параметрами?