问题标签 [loss-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1577 浏览

tensorflow - 在训练 CNN 进行图像分割时,我的损失怎么会突然增加?

我使用带有 tensorflow 1.4.0 后端的 keras 1.2.2。

我使用的是 unet 架构,我有 708 张 650x650 像素的图像和 6 个通道。我用镜像和旋转扩充了数据集,总共有 4248 张图像。

我有 2 个课程,我的损失函数是这个:

我的优化器:

我有一个大约占图像总数 30% 的验证集,batch_size 为 4,shuffle 设置为 True。该模型在每个时期遍历每个训练图像。计划了 200 个 epoch,但如果 10 个 epoch 的验证集没有改进,学习将停止。

这是最后一个时期的训练日志

我不知道 epoch 12 和 13 之间发生了什么。是我的错还是有一个已知的错误可以通过升级到更新版本的 keras/tf 来修复?

0 投票
1 回答
606 浏览

python - 如何为张量流中的多标签分类的不平衡数据实现加权损失

我有一个不平衡的数据集,我的任务是多标签分类

这是我减少损失的代码:

现在。我想weighted-loss用于我的分类,我该怎么做呢?我可以使用这个链接,并替换softmaxsigmoid

观点

我已阅读此链接,但我的情况不是二进制分类,在tensorflow_org中我认为它也适用于二进制分类。

0 投票
2 回答
1391 浏览

tensorflow - 自定义损失函数:对 y_pred 中的数据执行 model.predict

我正在训练一个网络去噪图像,为此我使用 CIFAR10 数据集。我正在尝试生成一个自定义损失函数,以便损失是 mse/classification_accuracy。鉴于我的网络接收 32x32(噪声)图像作为输入并预测 32x32(去噪)图像,我假设 y_pred 和 Y_true 将是 32x32 图像的数组。因此我的自定义损失函数如下所示:

classif_model 是一个预训练模型,可将 CIFAR10 图像分类为 10 个类别之一。它接收一组 32x32 图像。

但是,当我运行我的代码时,出现以下错误:

回溯(最近一次通话最后):

文件“myCode.py”,第 94 行,在

myModel.compile(optimizer='adadelta', loss=custom_loss()) 文件“/home/rvidalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/engine/training.py”,第 850 行, 在编译

sample_weight,掩码)文件“/home/rvdalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/engine/training.py”,第450行,加权

score_array = fn(y_true, y_pred) 文件“myCode.py”,第 57 行,在joint_optimized_loss 中

preds = classif_model.predict(y_pred) 文件“/home/rvidalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/models.py”,第 913 行,在预测中

return self.model.predict(x, batch_size=batch_size, verbose=verbose) 文件“/home/rvidalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/engine/training.py”,行1713,在预测中

详细=详细,步骤=步骤)文件“/home/rvidalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/engine/training.py”,第 1260 行,在 _predict_loop

batches = _make_batches(num_samples, batch_size) 文件“/home/rvidalma/anaconda2/envs/tensorUpdated/lib/python2.7/site-packages/keras/engine/training.py”,第 374 行,在 _make_batches

num_batches = int(np.ceil(size / float(batch_size)))
AttributeError: 'Dimension' object has no attribute 'ceil'

我认为这与以下事实有关,y_true并且y_pred都是在训练之前为空的张量,因此classif_model.predict失败,因为它期望一个数组。但是我不确定如何解决这个问题......

我尝试获取y_predusing的值K.get_value(y_pred),但这给了我以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:形状 [-1,32,32,3] 具有负尺寸 [[Node: input_1 = Placeholderdtype=DT_FLOAT, shape=[?,32,32,3], _device="/工作:本地主机/副本:0/任务:0/cpu:0“]]

0 投票
0 回答
1227 浏览

regression - xgboost 中用于回归的自定义目标函数

我正在研究一个回归问题,我想修改 xgboost 库中的损失函数,以便我的预测永远不会小于实际值。我写了这段代码:

这本质上意味着我想更多地惩罚那些小于我的实际值的预测。但是,这不起作用,我的预测也没有改善。谁能帮我弄清楚我哪里出错了?谢谢。

编辑:整个python脚本 -

0 投票
1 回答
22143 浏览

python - Keras 中的自定义加权损失函数,用于对每个元素进行加权

我正在尝试创建一个简单的加权损失函数。

比如说,我的输入尺寸为 100 * 5,输出尺寸也是 100 * 5。我还有一个相同尺寸的权重矩阵。

类似于以下内容:

定义自定义损失函数

定义模型

使用现有指标进行测试可以正常工作

使用我们的自定义损失函数进行测试不起作用

它提供了以下堆栈跟踪:

数字 32 是从哪里来的?

使用权重作为 Keras 张量测试损失函数

这个功能似乎可以完成这项工作。因此,可能表明 Keras 张量作为权重矩阵会起作用。因此,我创建了另一个版本的损失函数。

损失函数尝试3

使用 cl3 拟合数据会产生与上述相同的错误。

我想知道我错过了什么!我本可以在 Keras 中使用 sample_weight 的概念;但后来我不得不将我的输入重塑为 3d 矢量。

我认为这个自定义损失函数真的应该是微不足道的。

0 投票
1 回答
3325 浏览

python - 如何对自定义 Keras / Tensorflow 损失函数中的值进行排序?

介绍

我想为 Keras 实现一个自定义损失函数。我想这样做,因为我对我的数据集的当前结果不满意。我认为这是因为目前内置的损失函数专注于整个数据集。我只想关注数据集中的最高值。这就是为什么我想出了以下自定义损失函数的想法:

自定义损失函数理念

自定义损失函数应该取前 4 个预测值最高的预测值,并用相应的真实值减去它。然后从这个减法中取出绝对值,将其乘以一些权重并将其添加到总损失总和中。

为了更好地理解这个自定义损失函数,我使用列表输入对其进行了编程。希望通过这个例子可以更好地理解:

以下示例计算损失 = 4*abs(0.7-0.5)+3*abs(0.5-0.7)+2*abs(0.4-0.45) +1*abs(0.4-0.3) = 1.6 for i=0

然后它除以 div_top,在本例中为 10(对于 i=0,它将为 0.16),对所有其他 i 重复所有操作,最后取所有样本的平均值。

对 Keras 的实现

我想在 Keras 中使用这个函数作为自定义损失函数。这看起来像这样:

显然,上面的 Keras 示例是行不通的。但我也不知道如何才能发挥作用。

解决问题的方法

我阅读了以下文章,试图解决问题:

Keras 自定义指标迭代

如何为模型使用自定义目标函数?

我还阅读了 Keras 后端页面:

Keras 后端

和 TensorFlow Top_k 页面:

tf.nn.top_k

对我来说,这似乎是最有前途的方法,但经过许多不同的实施方式后仍然行不通。使用 top_k 排序时,我可以获得正确的 pred_y 值,但无法获得相应的 true_y 值。

有人知道我如何实现自定义损失函数吗?

0 投票
1 回答
406 浏览

python - Keras自定义损失函数输出负值,不明白为什么?

亲爱的 StackOverflow 社区,我在 keras 中有以下损失函数:

当我尝试用它训练我的网络(y 归一化为 0 - 1)时,损失似乎达到了一个负值,这是我无法理解的。我用 numpy 计算了同样的东西,一切都按预期工作正常。

如果有人知道这种奇怪的负面解决方案的原因,我会非常高兴,所以感谢您的帮助。

0 投票
0 回答
594 浏览

conv-neural-network - 连体网络的准确性?

我正在使用本文中的对比损失层:

我已将边距设置为某个值。但我不太确定如何计算分类任务的准确性。

据我所知,我会计算与特征的欧几里得距离并检查某个阈值。这个阈值是否与保证金相同?或者这是另一个必须找到的参数?

0 投票
0 回答
544 浏览

c++ - 如何在 caffe 中正确实现自定义损失函数?

我是 caffe 的初学者,我正在实现 caffe 的自定义损失函数。但错误发生在运行测试。

我的损失函数与欧几里得损失相似。原始的欧几里得损失方程如下。

在此处输入图像描述

我想实现 2D 距离损失。所以我做了如下等式。

在此处输入图像描述

然后,运行测试结果是后向函数错误。我认为写反向传播的方式有问题。但是,我不确定出了什么问题。我只是简单地修改欧几里得损失来调整我的损失函数,并在反向传播中编写了我的损失函数的梯度。你知道为什么会发生错误吗?

imgdist_loss_layer.cpp

imgdist_loss_layer.cu

imgdist_loss_layer.hpp(仅更改类名)

test_imgdist_loss_layer.cpp

错误日志如下。

0 投票
1 回答
2282 浏览

python - 我在哪里可以看到 pytorch 的 MSELoss 的源代码?

我使用 U-NET 网络来训练我的数据。但是我需要修改它的损失函数来减少1以下像素的损失,以减少负例对网络权重的影响。但是我在pycharm MSELOSS中打开了源代码,看到这个:

我得不到任何有用的东西。