Я пытаюсь реализовать функцию потерь для FCN.Мой вывод - тензор формы (n, c, h, w).Моя цель имеет форму (ч, ш).Я хотел бы рассчитать потери между выводом и тензором, но проблема в том, что у меня есть маска.Есть только определенная часть изображения, для которой я заинтересован в подсчете потерь и тренировках (остальные я хотел бы игнорировать).Я пытаюсь достичь своей цели, развернув изображение в массивы, а затем наложив на него маску.Тогда я бы рассчитал убыток.Когда я это делаю, я получаю сообщение об ошибке:
RuntimeError: Ошибка утверждения `cur_target> = 0 && cur_target
Пожалуйста, ознакомьтесь с моим кодом (может быть более простой способ сделать это, поскольку я новичок в этом):
def Loss(inp, target, mask):
mask=torch.from_numpy(np.array(mask, dtype=np.uint8))
target=target.contiguous().view(-1,1) #Flattening the Target Image
mask = mask.contiguous().view(-1, 1) #Flattening Mask
target = target[~mask] #Masking Target
n, c, h, w = inp.size()
inp1=np.zeros((target.shape[0],c)) #Creating new empty array with dimensions of (masked_region, c)
inp1=torch.from_numpy(inp1)
for i in range( c):
inp1[:,i]=inp[0,i,:,:].view(-1,1)[~mask] #Masking the input and filling in the array created
log_p = F.log_softmax(inp1, dim=1)
criterion=nn.NLLLoss()
loss = criterion(log_p, target)
return loss