gpt4 book ai didi

python - 如何获取y_true和y_pred之差的水平和垂直梯度?

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:31 25 4
gpt4 key购买 nike

我想使用 Keras 定义一个自定义损失函数,其中包含 y_true 和 y_pred 之间差异的梯度。我发现 numpy.gradient 可以帮助我获取数组的梯度。所以我的损失函数代码的一部分如下所示:

def loss(y_true, y_pred):
d = y_true - y_pred
gradient_x = np.gradient(d, axis=0)
gradient_y = np.gradient(d, axis=1)

但事实证明d是一个Tensorflow张量类,numpy.gradient无法处理它。我对 Keras 和 Tensorflow 有点陌生。

还有其他功能可以帮助我做到这一点吗?或者我必须自己计算梯度?<​​/p>

最佳答案

我遇到了同样的问题,想要使用定义损失函数np.gradient。我编写了该函数的纯 tensorflow 版本来解决该问题。

这是我的版本:(它与带有 axis=-1np.gradient 具有相同的行为。)如果您想让它适用于任意轴,你需要多尝试一下:

def my_gradient_tf(a):
rght = tf.concat((a[..., 1:], tf.expand_dims(a[..., -1], -1)), -1)
left = tf.concat((tf.expand_dims(a[...,0], -1), a[..., :-1]), -1)
ones = tf.ones_like(rght[..., 2:], tf.float64)
one = tf.expand_dims(ones[...,0], -1)
divi = tf.concat((one, ones*2, one), -1)
return (rght-left) / divi

关于python - 如何获取y_true和y_pred之差的水平和垂直梯度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com