问题是, nllloss expected long but int found, #2 target should be long type
当进行分类时,若使用cross_entropy,它会要求labels是long的类型。所以上网查了很多,解决方案大多是两种:
假设输入是a = torch.tensor([1., 2, 3])
此时,a是torch.float类型。
1. 使用a.to(torch.long)
2. 使用a.long()
这两种方法的确可以转换类型为long(或者叫int64)
但是!我的问题并没有解决!我改了之后依然报这个错。
在网络运行过程中,转换完成之后结果可能会马上转换为int32,我不清楚具体是为什么,感觉应该是传入cross_entropy函数前或者过程又调用a变量时,自动识别了long类型太大了,自动将其转换为了int32。
因此我察觉到自己的问题是,类型转换的位置不对,所以解决问题的办法时,在传入loss函数时将其类型改一下:
问题解决!