Keras: вторая производная от модели keras постоянно дает 0 - PullRequest
0 голосов
/ 06 апреля 2020

Чтобы вычислить вторую производную нейронной сети по отношению к входу с использованием модели керас, я реализовал коды, использованные в этих двух постах:

Однако для обоих методов вторая производная всегда равно 0. Вот задача, воспроизведенная по простой регрессии функции c квадратичного типа:

import tensorflow as tf
import tensorflow.keras.backend as K
from tensorflow.keras.backend import set_session
from tensorflow.keras import datasets, layers, models
from tensorflow.keras import optimizers
import numpy as np


x = np.linspace(0, 1, 1000)
y = x**2

def model_regression():
  model = tf.keras.Sequential([
  layers.Dense(1024, input_dim=1, activation="relu"),
  layers.Dense(1, activation="linear")])
  model.compile(optimizer=optimizers.Adam(lr=0.001),
           loss='mean_squared_error')
  return model

my_model = model_regression()
my_model.fit(x, y, epochs=10, batch_size=20)

y_pred = my_model.predict(x)

#### Technique 1
first_input = K.gradients(my_model.output, my_model.input)
second_input = K.gradients(first_input, my_model.input)
iterate_first = K.function([my_model.input], [first_input])
iterate_second = K.function([my_model.input], [second_input])

#### Technique 2
# def grad(y, x):
#     print(y.shape)
#     return layers.Lambda(lambda z: K.gradients(z[0], z[1]), output_shape=[1])([y, x])
# derivative1 = grad(my_model.output, my_model.input)
# derivative2 = grad(derivative1, my_model.input)
# iterate_first = K.function([my_model.input], [derivative1])
# iterate_second = K.function([my_model.input], [derivative2])

first_derivative, second_derivative = [], []

for i in range(x.shape[0]):
    first_derivative.append(iterate_first(np.array([[x[i]]]))[0][0][0])
    second_derivative.append(iterate_second(np.array([[x[i]]]))[0][0][0])

Вот графический результат, поскольку вы можете видеть, что вторая производная всегда равна 0, в то время как она приблизительно должен быть равен 2. Как я могу правильно вычислить вторую производную моей нейронной сети в кератах?

enter image description here

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