我想在Tensorflow损失函数中使用此函数:
def rectified_projection(self, disp_x, image):
H, W, B = self.HEIGHT, self.WIDTH, self.batch_size
disp_x = tf.cast(disp_x, tf.int32)
disp_x = self.bias_x + disp_x
disp = tf.concat([self.disp_y, disp_x], 3)
disp = tf.clip_by_value(disp, 0, W)
sdisp = tf.scatter_nd(disp, image, (B, H, W, 3), name="SCATTER")
return sdisp
此代码将image
的像素在行中移动从图层输出的disp_x
的值。
问题是当我想通过这种转换来训练我的网络时。 Tensorflow输出不知道如何通过网络传播梯度。如何固定?
编辑:
完整的错误消息:
ValueError:
No gradients provided for any variable,
check your graph for ops that do not support gradients,
between variables "last_layer" "loss_function"
答案 0 :(得分:1)
使用tf.clip()
解决方案:使用从R到[0,W]的双射函数,如vector = W * (vector / (2*tf.reduce_max(tf.abs(vector)))+0.5)
,可以计算出梯度...