问题标签 [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 投票
0 回答
394 浏览

tensorflow - tf.extract_image_patches 用于 3D 图像

tf.extract_image_patches 的文档

仅适用于2D图像,是否可以扩展到3D图像,这对SSIM损失函数的实现有用吗?

我找不到源代码。有一个类似的功能skimage.util.view_as_windows,但是,当我尝试将此功能与 tensorflow 作为 keras 中的后端一起使用时,会出现错误。从 numpy 数组到张量的过渡让我很困惑。

0 投票
1 回答
1539 浏览

python - Keras/theano 中的最大保证金损失

我想在 Keras 中训练一个神经网络(使用 theano 作为后端),每个正样本使用一个负样本,并使用最大边际损失函数:

我有一个神经网络,它接受两个参数ij返回 score base(i,j)。对于给定i的,我有一个正样本j和负样本k。所以,我想计算以下内容:

在抽象级别,我的代码如下所示:

请注意,XX在训练期间是无用的。

运行代码时,出现以下错误:

我认为问题在于损失函数的计算。

注意:我尝试过使用XX原始向量和列向量。但是,错误仍然相同。

可以在此处此处找到使用 TensorFlow 作为后端的相同问题的解决方案。


编辑1:

如下更改损失函数是可行的(我的意思是它可以正常工作)。但是,我既不知道为什么,也不知道新代码的正确性。

0 投票
2 回答
16554 浏览

python - keras 中的 categorical_crossentropy 是如何实现的?

我正在尝试应用蒸馏的概念,基本上是为了训练一个新的更小的网络来做与原始网络相同但计算量更少的网络。

我有每个样本的 softmax 输出而不是 logits。

我的问题是,分类交叉熵损失函数是如何实现的?就像它取原始标签的最大值并将其与同一索引中对应的预测值相乘,或者它对整个 logits 进行求和(One Hot encoding),如公式所示:

在此处输入图像描述

0 投票
2 回答
1509 浏览

keras - Keras 如何处理分类交叉熵的 log(0)?

我有一个在 MNIST 上训练的神经网络,其损失函数为分类交叉熵。

出于理论目的,我的输出层是 ReLu。因此它的很多输出都是0。

现在我偶然发现了以下问题:

为什么我不会得到很多错误,因为我的输出中肯定会有很多零,我会记录下来。

这里,为方便起见,使用分类交叉熵的公式。

L = \sum_{i=1}^m \sum_j L_{i,j} \log y_{i,j}

0 投票
0 回答
702 浏览

python - TensorFlow:针对当前模型中的损失进行预训练的前向传递

我正在尝试使用在此处找到的 tensorflow 中实现的预训练 FaceNet 模型以便对当前模型的输出运行前向传递,从而在当前模型上产生新的损失。我不想在 FaceNet 模型中训练权重,所以我会tf.stop_gradient()在某个时候利用它。

为了在我当前的图表中添加前向传递,我正在导入整个模型结构,network = importlib.import_module(models.inception_resnet_v1))或多或少遵循链接中的预训练网络的训练方案。因此,在我当前的模型结构中,我添加了如下内容:

然后我通过查看生成数据的 L2 和通过 facenet 推理传递的真实数据来添加我的新损失函数network.inference()

然后在训练中我打电话

但是,我得到了很多这样的输出

我只找到了一种在会话中导入训练模型和调用张量的方法。我需要使用类似的东西直接添加到我的模型结构中network.inference(data,...)。我确信我遗漏了一些明显的东西,但我找不到任何这样的例子。我猜我的问题是:

  1. 我正在导入错误的模型文件或
  2. 我没有指定network需要恢复的特定变量

关于如何解决这个问题的任何想法?

澄清:

  1. 我正在使用版本 tf 1.0
  2. 我正在使用我下载的 ckpt 文件

事实证明,我需要指定网络中需要恢复的特定变量。

Saver 需要指定 var 以指示要恢复的权重。否则,我认为默认情况下会尝试为要训练的模型找到所有可训练的变量权重,但我只需要恢复一个模型。

0 投票
1 回答
371 浏览

tensorflow - tf.softmax_cross_entroy_with_logits 的输出未标准化?

我为图像分类(二元分类)实现了一个简单的 cnn 网络。我在 Python 中使用 tensorflow。我使用 tf.softmax_cross_entropy_with logits 作为成本函数。我用模型输出层的非标准化 logits 提供成本函数。函数应该输出归一化的概率,还是我错了?

在训练我的模型期间,我正在打印每个示例的成本。如果模型正确预测输出,则成本等于 0.0,否则成本非常大,未归一化值)。虽然在计算交叉熵之前输入了函数“softmaxes”,但为什么输出未归一化?

0 投票
1 回答
758 浏览

customization - 使用 Keras 为损失函数构建自定义指标,但有错误

我正在尝试编写自定义度量函数以在以这种方式编写的编译步骤中设置:

我用这种方式写了 Dice Similarity Coefficient、Positive Predictive Value 和 Similarity:

  • FP = 误报
  • TP = 真阳性
  • FN = 假阴性



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

InvalidArgumentError(有关回溯,请参见上文):您必须使用 dtype float [[Node: dense_3_target = Placeholderdtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task 为占位符张量“dense_3_target”提供一个值:0/cpu:0"]]

有人可以解释一下问题出在哪里吗?我哪里错了?

谢谢

0 投票
1 回答
1081 浏览

tensorflow - 如何将值分配给 Tensorflow 中的指定位置?

我想实现一个 SSIM 损失函数,因为边界被卷积中止,我想保留边界并计算边界像素的 L1 损失。代码是从这里学习的。TensorFlow 的 SSIM / MS-SSIM

比如我们有img1和img2 size [batch,32,32,32,1],还有Guassian 11的window_size,结果ssim map会是[batch,22,22,22,1],L1 map [batch ,32,32,32,1] 如何将 ssim 分配到 L1 的中心?

我收到这样的错误; TypeError: 'Tensor' object does not support item assignment

0 投票
2 回答
4796 浏览

tensorflow - Keras 和 TensorFlow 中所有这些交叉熵损失之间有什么区别?

所有这些交叉熵损失之间有什么区别?

Keras 在谈论

  • 二元交叉熵
  • 分类交叉熵
  • 稀疏分类交叉熵

虽然 TensorFlow 有

  • 使用 logits 的 Softmax 交叉熵
  • 带有 logits 的稀疏 softmax 交叉熵
  • 带 logits 的 Sigmoid 交叉熵

它们之间有什么区别和关系?它们的典型应用是什么?有什么数学背景?还有其他应该知道的交叉熵类型吗?有没有没有 logits 的交叉熵类型?

0 投票
2 回答
811 浏览

python-3.x - Keras 中带有 TensorFlow 后端的图像自定义损失函数

我是神经网络和 keras 的新手,在编写这个自定义损失函数时遇到了麻烦:

损失函数

我使用 TensorFlow 作为后端。我看到了其他的例子,并以这种方式编写了损失函数:

我得到的错误是: TypeError: unsupported operand type(s) for /: 'int' and 'Dimension'

另外我不确定如何将学习率纳入损失函数。谢谢你的帮助。