【问题标题】:Keras image segmentation: loss function for a single pixelKeras图像分割:单个像素的损失函数
【发布时间】:2018-09-23 13:19:25
【问题描述】:

我的问题可能很容易为您解决,但我没有找到任何答案,也不知道如何实现,因为我对 Keras 和 Tensorflow 也很陌生。

问题:我使用了一个预训练的图像分割网络(PSPNet by Hengshuang Zhao et al 2017),为此有人使用 Tensorflow 后端(PSPNet-Keras-tensorflow)将权重从 Caffe 转换为 Keras。

我想计算分类交叉熵损失函数相对于权重的梯度,目前还没有那么复杂并且我可以解决。但问题在于损失函数,因为我只想要预测的单个像素的损失。

到目前为止,我对整个图像的丢失是:

weights = model.trainable_weights

gradients = model.optimizer.get_gradients(model.total_loss, weights) 
# model is compiled with categorical crossentropy

input_tensor = [model.inputs[0],  # input data
                model.sample_weights[0],  # how much to weight each sample by
                model.targets[0],  # labels
                keras.backend.learning_phase()  # train or test mode]

get_gradients = keras.backend.function(inputs=input_tensors, outputs=gradients)

如何调整它以仅计算单个像素的损失?

PS:之后我想遍历整个图像(约 200 万像素)并为每个像素计算分类交叉熵损失相对于权重的梯度。

感谢您的任何帮助和建议。

【问题讨论】:

    标签: python tensorflow deep-learning keras image-segmentation


    【解决方案1】:

    我建议您创建一个具有不同损失函数的模型,该模型仅在您感兴趣的特定像素上进行评估。

    编辑: 您使用的 model.total_loss 是整体损失。请查看 \keras\engine\training.py。您将在那里找到总损失的实际计算。尝试重现这些步骤,但您仍然需要一个不会减少空间维度的自定义损失函数。我希望这足以让您开始。

    【讨论】:

    • 因为我不想训练新的权重,我必须使用来自PSPNet-Keras-tensorflow 的预训练权重。这个损失函数会是什么样子?所以我需要一种方法来查看单个像素。我还想遍历整个图像(约 200 万像素)并单独查看每个像素。
    • 你可以加载任何你喜欢的权重,不管你使用的是什么损失函数。 但是,如果您需要对所有像素都这样做,那么这种方法将非常低​​效。
    猜你喜欢
    • 2018-10-19
    • 2017-07-24
    • 2018-10-22
    • 2020-02-17
    • 2020-04-18
    • 2018-05-12
    • 2020-07-28
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多