【发布时间】:2022-07-29 15:55:45
【问题描述】:
我有一组 256x256 的图像,每个图像都标有九个二进制 256x256 掩码。我正在尝试计算 pos_weight 以便使用 Pytorch 对 BCEWithLogitsLoss 进行加权。
我的掩码张量的形状是tensor([1000, 9, 256, 256]),其中 1000 是训练图像的数量,9 是掩码通道的数量(全部编码为 0/1),256 是每个图像边的大小。
为了计算 pos_weight,我将每个掩码中的零相加,然后将该数字除以每个掩码中所有零的总和(遵循建议的 here。):
(masks[:,channel,:,:]==0).sum()/masks[:,channel,:,:].sum()
计算每个遮罩通道的权重会提供一个形状为tensor([9]) 的张量,这对我来说似乎很直观,因为我想要为九个遮罩通道中的每一个通道设置一个 pos_weight 值。但是,当我尝试拟合我的模型时,我收到以下错误消息:
RuntimeError: The size of tensor a (9) must match the size of
tensor b (256) at non-singleton dimension 3
此错误消息令人惊讶,因为它表明权重需要是图像一侧的大小,而不是遮罩通道的数量。 pos_weight 应该是什么形状,我如何指定它应该为遮罩通道而不是图像像素提供权重?
【问题讨论】:
标签: python deep-learning pytorch loss-function weighted