Я хочу использовать евклидову норму в качестве функции потерь 0,5 || Корреляция || ^ 2.Но, если я это осуществлю, появится не правильный результат.Должно появиться снова левое или правое входное изображение.
Я реализовал два градиента.grad
выплевывает левое или правое изображение, в то время как grad_norm
(евклидово расстояние) выплевывает очень большие числа ...
import tensorflow as tf
im1 = np.ascontiguousarray(np.arange(36).reshape((1,3,3,4))).astype(np.float32)
im2 = np.ascontiguousarray(np.arange(36,72).reshape((1,3,3,4))).astype(np.float32)
t_mult = tf.multiply(t_im1, t_im2)
t_corr = tf.reduce_sum(t_mult, axis=[1])
grad = tf.gradients(ys=t_corr, xs=[t_im1, t_im2])
# Euclidiean Norm: 1/2 ||t_corr||^2 = df/im0 = im1
loss1 = tf.multiply(tf.square(t_corr), 0.5)
grad_norm = tf.gradients(ys=loss1, xs=[t_im1, t_im2], stop_gradients=[t_im1, t_im2])
loss1 = tf.multiply(tf.square(t_corr), 0.5)
sess = tf.InteractiveSession()
# print t_mult.eval()
# print t_corr.eval()
# print grad0[0].eval() # returns right image
# print grad0[1].eval() # returns left image
grad_norm[0].eval() # ought to return left image