Как преобразовать функции numpy в операции tensorflow без ошибок

#python #numpy #tensorflow #keras #gradient

#python #numpy #tensorflow #keras #градиент

Вопрос:

Я создаю пользовательскую потерю, которая учитывает градиент и лапласиан изображения

 def custom_loss_mse_GradLap(X_true, X_pred):

  X_pred_GradLap = np.asarray(model_CompGradientLaplacian(X_pred))
  X_true_GradLap = np.asarray(model_CompGradientLaplacian(X_true))

  #define the parametrs
  alpha          = np.array([1/3,1/3,1/3])
  # mse for field

  loss1   = K.mean(K.square(X_pred-X_true), axis=-1)                             

  # mse for gradient
  loss2 = K.mean(K.square(X_pred_GradLap[0]-X_true_GradLap[0]), axis=-1)

  # mse for laplacian
  loss3 = K.mean(K.square(X_pred_GradLap[1]-X_true_GradLap[1]),axis=-1)

  return alpha[0] * loss1   alpha[1] * loss2   alpha[2] * loss3
  

Но у меня проблемы с вычислением градиента и лапласа.
Я попробовал следующее, но это вызывает ошибки

 input=tf.placeholder(shape=(64,64),dtype=tf.float32)
def calc_grad(x):
  return np.gradient(x)
grad = Lambda(lambda x:tf.py_func(calc_grad,[x],tf.float32))
model_grad = Model(input_data,grad)
  

Комментарии:

1. Какие ошибки он вызывает? Если вы используете numpy для вычислений, зачем вам вообще нужен tensorflow?

2. Есть ли tensorflow методы или функции для преобразования a placeholder в массив? Не рассчитывайте на np.asarray(...) правильное преобразование ваших объектов в массивы. tensorflow должен кое-что знать numpy , но это не работает в другом направлении.

3. Я решил проблему, используя фильтры для вычисления градиента и лапласиана и применяя регулярные свертки.