问题标签 [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 回答
6698 浏览

tensorflow - keras 结合了两个损失和可调节的权重

在此处输入图像描述

所以这里是详细的描述。我有一个带有两层输出 x1 和 x2 的 keras 功能模型。

我需要使用这些 x1 和 x2,合并/添加它们并提出加权损失函数,如附图中所示。将“相同的损失”传播到两个分支。Alpha 可以灵活地随迭代而变化

0 投票
1 回答
354 浏览

python - Keras神经网络输出函数参数/如何构造损失函数?

我正在研究基于 Keras/TensorFlow 的神经网络。我正在尝试做一些不同的事情。

通常,网络的输出层会产生一个输出张量(即数字列表)。然后使用诸如均方误差之类的损失函数将这些数字直接与训练数据的目标列表(标签)进行比较。

但是,我希望网络的输出层是用作函数参数的数字列表。该函数对这些参数进行操作以生成新的数字列表。然后,损失函数成为函数输出和标签之间的 MSE(而不是通常情况下的输出层和标签之间的 MSE)。

我知道我需要编写一个 Keras 自定义损失函数,它根据输出层的值计算目标函数的值,然后计算并返回目标函数输出和标签之间的 MSE。我还意识到所有这些都需要在 TensorFlow 图中完成,并且目标函数需要是可微的,以便可以计算梯度。我相信我足够了解这一切。

这是我无法理解的。假设输出层中有四个神经元——称它们为 a、b、c、d。它们中的每一个都是目标函数 F(a, b, c, d) 的单独参数。假设我迭代 F(a, b, c, d) 20 次并得到一组 20 个值。即F(a, b, c, d, 1);F(a, b, c, d, 2); 等等然后我只想取这 20 个值和相应标签张量中的 20 个值之间的 MSE。那将是损失函数。

我只是不太了解 Keras/Tensorflow 后端,无法知道如何获取输出张量的各个元素。如何处理此张量中的第零个、第一个、第二个等元素,以便我可以使用它们来计算函数值?我知道如何对整个张量执行操作,但我不明白如何处理单个张量元素。

我希望我已经足够清楚地解释了这个问题。

谢谢你的帮助!

0 投票
1 回答
7601 浏览

python - keras中的加权mse自定义损失函数

我正在处理时间序列数据,提前输出 60 天的预测数据。

我目前使用均方误差作为我的损失函数,结果很糟糕

我想实现一个加权均方误差,这样早期的输出比后来的输出重要得多。

加权均方根公式:

加权均方根公式

所以我需要一些方法来迭代张量的元素,使用索引(因为我需要同时迭代预测值和真实值,然后将结果写入只有一个元素的张量。它们都是(?,60) 但实际上是 (1,60) 列表。

我正在尝试的一切都不起作用。这是损坏版本的代码

结果,我目前收到此错误:

阅读了对类似帖子的回复后,我认为掩码无法完成任务,并且循环一个张量中的元素也行不通,因为我无法访问另一个张量中的相应元素。

任何建议,将不胜感激

0 投票
0 回答
1122 浏览

image-processing - Keras:灰度图像作为标签的损失函数

我是深度学习、Keras 和图像处理的新手。我正在做一个项目,我尝试使用 CNN 补偿灰度图像中的运动伪影。因此,我有一个没有运动伪影的灰度图像作为标签。

但现在我不确定要使用哪个损失函数和什么样的错误度量。也许我需要某种 2D 互相关损失函数?或者像均方误差这样的损失函数有意义吗?使用“均方对数误差”进行的第一次训练产生了视觉上良好的结果(预测看起来很像标签图像),但 CNN 的准确率接近 0%。

是否有人在该领域有经验并且可以推荐一些文献或提出合适的损失函数和错误度量!?

如果我需要提供更详细的信息,请告诉我,我非常乐意这样做。

使用的 CNN(有点像 Unet):

谢谢你的帮助!

0 投票
0 回答
460 浏览

r - Keras 的 R 接口:如何调试自定义损失函数?

我在 R 中使用keras包,并想定义一个自定义损失函数。

虽然我能够找到一些示例(其中一个),但没有关于如何调试自己的损失函数的内容。也就是说,即使我让它工作,我如何验证它是否正常工作(例如,取一些y_trueand y_pred,然后进行计算)?

我尝试print在函数内添加一条语句,但没有任何结果。

0 投票
1 回答
2546 浏览

python - 变分自动编码器损失函数(keras)

我正在使用 Keras 构建变分自动编码器。我很大程度上受到@Fchollet 示例的启发:https ://github.com/fchollet/keras/blob/master/examples/variational_autoencoder.py

但我正在处理连续数据。我的输出是一个持续时间,而不是像在 MNIST 中那样对数字进行排名。在这方面,我将损失函数从 binary_crossentropy 更改为 mean_squared_error。我主要想知道第二个术语,KL 散度。它应该适用于连续数据吗?我无法绕过它。对我来说,它应该将相似的数据紧密地放在潜在空间中。例如,在 MNIST 数据的 CAS 中,将每个“1”放在潜在空间中,将每个“2”放在一起等等......因为我正在处理连续数据,它是如何工作的?在我的情况下是否有更好的丢失功能?

这是丢失的功能:

这是 3D 潜在空间中的表示。 在此处输入图像描述

如您所见,一些类似的数据根据​​需要放在一起。当我将 kl_loss 函数的系数增加到 "-100000" 而不是 "-0.5" 时,会发生以下情况: 在此处输入图像描述

我以为我会以几乎线性的方式从蓝色变为红色。相反,我以混乱的方式获得了所有数据的集群。

你们能帮帮我吗?谢谢 !

0 投票
0 回答
340 浏览

tensorflow - 训练用于无监督学习的小批量数据(无标签)

有没有人为无监督学习问题训练过小批量数据?feed_dict 使用标签并处于无监督设置中。你如何克服它?我们可以使用对损失函数没有贡献的假标签吗?

基本上,我想遍历我的庞大数据集,然后优化自定义损失函数。但是,当明确使用数据中的新小批量时,我无法弄清楚如何保留我的训练参数(权重)。

例如,整个数据集为 6000 个点,小批量大小为 600。目前,对于每个小批量,我只能使用新的独立权重参数,因为权重是根据来自该小批量的数据点进行初始化的。当我们优化第一批 600 个数据点的损失时,我们得到了一些优化的权重。如何使用这些权重来优化下一批 600 个数据点等等。问题是我们不能使用共享的全局变量。

我在 stackoverflow 论坛上进行了研究,但找不到与无监督数据上的小批量相关的任何内容。

'f' 是我的整个数据集,说 N 个点的文本数据,维度为 D U 是集群质心,再次是维度为 D 的 K 个集群

我将我的变量定义如下:

然后我将自定义损失或目标函数定义为“目标”

接下来我使用优化器

最后,我将变量评估为

我坚持的事情是迭代我的数据“f”批次,这些数据最终用于优化器 train_W。如果我对这些小批量有一个 for 循环,我将为每个迭代分配一个新变量 train_W。我怎样才能传递这个值,以便它可以在下一个小批量中使用?

在这方面的任何帮助或指示将不胜感激。提前致谢!

0 投票
1 回答
381 浏览

tensorflow - 当它是Tensorflow中某些函数的最小值时如何写损失

我知道一些目标是最小化损失函数,但是如果损失也是一个包含 minimum 的函数,我怎么能正确地写损失呢?这可能看起来有点混乱,让我举个例子。

损失函数定义如下: 在此处输入图像描述

其中f1, f2是某个网络的特征图输出,b是移位距离。特征图的移位就像[1, 2, 3, 4, 5]左移一步[2, 3, 4, 5, 1]

问题是我如何使用 tensorflow 编写这个损失函数,因为 b 是不可训练的,而可训练变量是网络中生成特征图的权重。在 Torch 中这似乎是可能的,因为我可能会以某种方式创建一个for 循环。我如何在 Tensorflow 中实现这一点?

0 投票
0 回答
420 浏览

numpy - 5PL 曲线的非线性最小二乘 (scipy) 中的异常值处理

我目前需要将 5PL 曲线拟合到我拥有的一些数据点。5PL 是一种非对称逻辑函数,常用于生物测定分析。其公式如下:

F(x) = D+(AD)/((1+(x/C)^B)^E)

我能够在 python (duh) 中使用 scipy 来获得拟合。我第一次使用我的数据知识来确定函数的起始参数:-

然后我使用res = least_squares(residuals, p0,bounds=bnd args=(x, y))where residuals 是计算我的数据和 5PL 函数之间的残差的函数,p0 包含我的初始参数,bnd 问题的边界和 args= 是传递给残差(我的数据)的参数。

现在结果是可以接受的,但我怀疑我的测量值有很强的异常值,我希望得到更可靠的结果。我发现您可以通过添加损失函数并修改 nonlin LS 来做到这一点(如此所述。

解决这个问题的线变成res_loss = least_squares(residuals, p0, bounds=bnd,loss='soft_l1', f_scale=1000, args=(x, y))了 loss='soft_l1' 确定我使用的损失函数的类型和 f_scale 内联值和异常值之间的阈值。

现在,在我能找到的每个示例中,人们只是使用他们想要拟合的曲线生成数据,并向该信号添加噪声。然后他们可以将 f_scale 值设置为等于他们引入的噪声。

这很好,但是如果不知道异常值的值是什么,应该如何选择 f_scale?有没有办法使用数据传播自动确定每个数据集的数据?

如果我的问题是线性的,我将只使用每个 X 处数据的 SD 来创建权重矩阵并求解加权最小二乘。非线性问题有类似的方法吗?

提前致谢

0 投票
0 回答
1135 浏览

python-3.x - Keras中的自定义损失函数,如何处理占位符

我正在尝试在 TF/Keras 中生成自定义损失函数,如果它在会话中运行并传递常量,则损失函数可以工作,但是,当编译成 Keras 时它会停止工作。

成本函数(感谢 Lior 将其转换为 TF)

这将打印 -0.62962962963,这是正确的值。

现在让我们把它放到 Keras MLP 中

这会产生错误

我尝试通过给出默认值 n/etc 来绕过它,但这似乎没有任何进展。

有人可以解释这个问题的性质以及我该如何解决吗?

谢谢!

编辑:

更新了一些东西以保持它为张量,然后投射

用作成本函数时仍然存在“无”的问题