RuntimeError: smooth_l1_loss_forward is not implemented for type torch.cuda.IntTensor
-> 1687 return torch._C._nn.smooth_l1_loss(input, target, reduction)
code:
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
class AGLoss(nn.Module):
def __init__(self):
super(AGLoss, self).__init__()
# def forward(self, gender_preds, gender_targets):
def forward(self, age_preds, age_targets, gender_preds, gender_targets):
"""Compute loss between (age_preds, age_targets) and (gender_preds, gender_targets)"""
age_prob = F.softmax(age_preds, dim=1).cuda()
age_expect = torch.from_numpy(np.array([torch.argmax(age_prob[i]) + 1 for i in range(0, 128)])).int().cuda()
print(age_prob.shape)
print(age_expect.shape)
print(gender_preds.shape)
print(gender_preds.shape)
age_loss = F.smooth_l1_loss(age_expect, age_targets)
gender_loss = F.binary_cross_entropy_with_logits(gender_preds.float().cuda(), gender_targets.float().cuda())
print("age_loss: %.3f | gender_loss: %.3f" & (age_loss.data[0], gender_loss.data[0]), end='|')
# print("gender_loss: {}".format(gender_loss.data[0]))
return age_loss + gender_loss
# return gender_loss```