RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'targ...

  • pytorch用nn.CrossEntropyLoss()计算损失时产生的错误
 File "test.py", line 49, in predictFromDataset
    loss = loss_fn(outputs,targets)
  File "D:\anaconda3\envs\py3\lib\site-packages\torch\nn\modules\module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "D:\anaconda3\envs\py3\lib\site-packages\torch\nn\modules\loss.py", line 948, in forward
    ignore_index=self.ignore_index, reduction=self.reduction)
  File "D:\anaconda3\envs\py3\lib\site-packages\torch\nn\functional.py", line 2422, in cross_entropy
    return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
  File "D:\anaconda3\envs\py3\lib\site-packages\torch\nn\functional.py", line 2218, in nll_loss
    ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'target' in call to _thnn_nll_loss_forward
  • 代码
def predictFromDataset(model, dataLoader, tansform=None,device=torch.device("cpu")):
    loss_fn = torch.nn.CrossEntropyLoss()
    total_loss  = 0
    model.eval()
    with torch.no_grad():
        for inputs, targets in dataLoader:
            inputs = inputs.to(device)
            targets = targets.to(device)
            outputs = model(inputs)
            print("outputs:",outputs)
            print("targets:",targets)
            loss = loss_fn(outputs,targets)
            total_loss += loss.data.item() * inputs.size(0)
            #print(loss)
        print("avargeLoss:{}".format(total_loss / len(dataLoader.dataset)))

输出的outputs 和 targets

outputs: tensor([[-4.1964, -0.5367, -2.6573, 17.1077, -5.7188,  5.4721, -2.1010, -1.5360,
         -1.3869, -4.9383],
        [ 2.6306, 14.9913, -7.4001, -8.3108, -5.6915, -4.8937, -4.5119, -7.8608,
         22.5722, -0.1781]], device='cuda:0')
targets: tensor([[0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]], device='cuda:0')

错误原因

CrossEntropyLoss does not expect a one-hot encoded vector as the target, but class indices

也就是CrossEntropyLoss需要的是类别的索引,而不是one-hot编码的格式,即不需要像[0,0,0,1,0,0]这样而要3.这个修改一下自定义的dataset类中的target即可。

  • 修改dataset的target,原来的target是one-hot编码的,把它改为类别索引,就是下面的label = np.argmax(label)
class myTestDataset(torch.utils.data.Dataset):
    def __init__(self,transform=None):
        images = np.load('data_src.npy')
        labels = np.load('label_src.npy')
        self.images = [Image.fromarray(x) for x in images]
        self.labels = labels / labels.sum(axis=1, keepdims=True)  # normalize
        self.labels = self.labels.astype(np.float32)
        self.transform = transform
    def __getitem__(self, index):
        image = self.images[index]
        label = self.labels[index]
        label = np.argmax(label)#这一句就是相比原来增加的
        if self.transform:
            image = self.transform(image)
        return image,label
    def __len__(self):
        return len(self.images)

注:不过需要注意targets计算时应该是int64或者long类型,可以在计算时用loss = loss_fn(outputs, targets.long())

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • id: 9vyvlNjQhL0ZiLxDj0Apotitle: Kerasdesc: 《Deep Learning...
    walkerwzy阅读 594评论 0 0
  • 1. TENSORS Tensors是一种特殊的数据结构,非常类似于数组和矩阵。在PyTorch中,我们使用Ten...
    龙小治阅读 328评论 0 1
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,041评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,876评论 0 2
  • 年纪越大,人的反应就越迟钝,脑子就越不好使,计划稍有变化,就容易手忙脚乱,乱了方寸。 “玩坏了”也是如此,不但会乱...
    玩坏了阅读 2,130评论 2 1