#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
методы или функции для преобразования aplaceholder
в массив? Не рассчитывайте наnp.asarray(...)
правильное преобразование ваших объектов в массивы.tensorflow
должен кое-что знатьnumpy
, но это не работает в другом направлении.3. Я решил проблему, используя фильтры для вычисления градиента и лапласиана и применяя регулярные свертки.