tensorflow - 计算多个张量的损失值

标签 tensorflow deep-learning conv-neural-network

在我的CNN深度学习网络的计算过程中,训练阶段的损失是用交叉熵函数计算的:

tf.nn.weighted_cross_entropy_with_logits(targets = labels_flat, logits = logits_flat, pos_weight=98.22)

但是,它假设预测和真实情况的位置非常好,但这里的情况并非如此。实际上,我的地面实况可以从 2-3 个像素进行局部偏移,因此,我想使用“像素级”比较的不确定性来计算交叉熵。

为此,我按以下方式处理: 我定义了想要的不确定性,这里是 2 个像素。然后,我可以在地面实况的每一侧裁剪 2 个像素。预测也会在不同的位置进行裁剪,模拟预测和真实情况之间的“转变”。 接下来,我必须计算这个“转移”预测和真实情况之间的损失,保存它并转到下一个“转移”预测。这样做,我用不同的偏移值计算了损失。

如果我正确理解了 tensorflow 中的交叉熵函数,那么如果预测良好,GT 和预测之间的像素比较应该是最小的。因此,我可以使用交叉熵张量每个分量的最小值来计算预测和 GT 之间的平均损失。

with tf.variable_scope('loss_layer'):
    Unc = 2
    labelsCropped = tf.image.crop_to_bounding_box(labels, Unc, Unc, 256-Unc*2, 256-Unc*2)
    labels_flat = tf.reshape(labelsCropped, [-1, depth])
    Allcross_entropy_loss = []
    for x in range(2*2):
        for y in range(2*2):
            logitsCropped = tf.image.crop_to_bounding_box(logits, x, y, 256-Unc*2, 256-Unc*2)
            logits_flat = tf.reshape(logitsCropped, [-1, depth])
            Allcross_entropy_loss += [tf.nn.weighted_cross_entropy_with_logits(targets = labels_flat, logits = logits_flat, pos_weight=98.22)]
            loss = tf.reduce_mean(tf.reduce_min(tf.stack(Allcross_entropy_loss), 0))

顺便说一句,这会非常快地产生等于 0 的损失(大约 100 次迭代,这快得令人难以置信,我之前的模型计算了超过 20 000 次迭代(20 个时期和 1000 次迭代/时期,有一个损失 ~0.4)。我预计这里会出现问题,但我不知道如何显示每个函数的输出,例如,我想知道 reduce_min 函数是否给出最小张量252x252 或仅 1 个值。如果返回 1 个值,则错误。

最佳答案

为了社区的利益,提及下面的解决方案。

从下面的行中删除 tf.stack 可以解决该问题。

loss = tf.reduce_mean(tf.reduce_min(tf.stack(Allcross_entropy_loss), 0))

正确代码如下:

loss = tf.reduce_mean(tf.reduce_min(Allcross_entropy_loss), 0)

关于tensorflow - 计算多个张量的损失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395211/

相关文章:

python - NASNet-A 微调验证精度差

neural-network - 如何使用keras进行二元分类?

tensorflow - Keras 没有显示使用 GPU 提高训练速度(部分 GPU 使用?!)

python - ValueError:输入 0 与层 conv2d_1 不兼容:预期 ndim=4,发现 ndim=3

tensorflow - 是否有用于解析 TFRecord 文件的 TensorFlow C++ API?

tensorflow - 使用预训练的 word2vec 初始化 Seq2seq 嵌入

numpy - 为什么我实现深度神经网络的成本在几次迭代后会增加?

machine-learning - Inception-ResNet-v2 模型由多少层组成?

java - 神经网络和大数据集

tensorflow - Keras 损失为负,准确度下降,但预测良好?