gpt4 book ai didi

python - 在图像回归任务中尝试预测均值和标准差时无法获得良好结果

转载 作者:行者123 更新时间:2023-12-01 06:20:21 25 4
gpt4 key购买 nike

我试图回归两个变量(平均值和标准差),然后尝试优化 log(gaussian_distribution) = log(std) + (target -mean)/(2 * std ^ 2)。

请注意,在相同的数据上,如果将第一个变量的损失更改为(或者甚至在我定义的函数中使用(目标 - 平均值)^ 2)MSE,我可以获得非常好的平均值分数。

我无法找出代码中的错误或找出它不工作的原因。

这是代码

 def gaussian_loss(y2, y1):                              
std = K.exp(y1[:,1])
mean = y1[:,0]
return K.mean(K.log(std) + K.square(mean - y2[:,0]) / (2 * K.square(std)), axis = -1)

我已经在 Keras 中实现了这个。一些相关博客( https://engineering.taboola.com/predicting-probability-distributions/ )

最佳答案

我已经实现了这个损失,你的实现是我的第一次尝试,正如你所说,它不起作用。我不知道为什么,但这是实现这种损失的正确方法:

def regression_nll_loss(sigma_sq, epsilon = 1e-6):
def nll_loss(y_true, y_pred):
return 0.5 * K.mean(K.log(sigma_sq + epsilon) + K.square(y_true - y_pred) / (sigma_sq + epsilon))

return nll_loss

如您所见,这种损失仅采用监督标签作为平均值。方差必须作为张量直接传递给损失:

inp = Input(shape=(1,))
x = Dense(10, activation="relu")(inp)
x = Dense(20, activation="relu")(x)
x = Dense(30, activation="relu")(x)
mean = Dense(1, activation="linear")(x)
var = Dense(1, activation="softplus")(x)

train_model = Model(inp, mean)
pred_model = Model(inp, [mean, var])

train_model.compile(loss=regression_nll_loss(var), optimizer="adam")

然后您可以使用 train_modelmodel.fit 进行正常训练,并使用 pred_model 进行预测。

您可以在以下位置查看使用我的库的完整示例:https://github.com/mvaldenegro/keras-uncertainty/blob/master/examples/regression_deep-ensemble.py

我认为使用add_loss API也可以实现这种损失,但我没有尝试过。

关于python - 在图像回归任务中尝试预测均值和标准差时无法获得良好结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60385762/

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