如何使用 PyTorch 在计算机视觉中使用软标签?
How to use soft labels in computer vision with PyTorch?
我有一个带有软标签的图像数据集(即图像不属于单个 class,而是我有一个概率分布表明这张图像有 66% 的机会属于一个 class 并且它有 33% 的几率属于其他 class).
我正在努力弄清楚如何设置我的 PyTorch 代码以允许它由模型表示并正确输出。概率保存在 csv 文件中。我查看了 PyTorch 文档和其他提到交叉熵损失函数的资源,但我仍然不清楚如何成功导入数据并使用软标签。
您要解决的是一项多标签分类任务,即 个实例一次可以用多个标签进行分类。您不能使用 torch.CrossEntropyLoss
因为它只允许单标签目标。所以你有两个选择:
要么用软版的nn.CrossEntropyLoss
function, this can be done by implementing the loss by hand allowing for soft targets. You can find such implementation on Soft Cross Entropy in PyTorch.
或者考虑任务是多个“独立”的二元分类任务,在这种情况下,你会使用nn.BCEWithLogitsLoss
(这一层包含一个sigmoid 函数)。
我有一个带有软标签的图像数据集(即图像不属于单个 class,而是我有一个概率分布表明这张图像有 66% 的机会属于一个 class 并且它有 33% 的几率属于其他 class).
我正在努力弄清楚如何设置我的 PyTorch 代码以允许它由模型表示并正确输出。概率保存在 csv 文件中。我查看了 PyTorch 文档和其他提到交叉熵损失函数的资源,但我仍然不清楚如何成功导入数据并使用软标签。
您要解决的是一项多标签分类任务,即 个实例一次可以用多个标签进行分类。您不能使用 torch.CrossEntropyLoss
因为它只允许单标签目标。所以你有两个选择:
要么用软版的
nn.CrossEntropyLoss
function, this can be done by implementing the loss by hand allowing for soft targets. You can find such implementation on Soft Cross Entropy in PyTorch.或者考虑任务是多个“独立”的二元分类任务,在这种情况下,你会使用
nn.BCEWithLogitsLoss
(这一层包含一个sigmoid 函数)。