我学习pytorch,并采取ANPR项目,这是基于tensorflow (https://github.com/matthewearl/deep-anpr, http://matthewearl.github.io/2016/05/06/cnn-anpr/) 作为练习,移植它pytorch平台。约torch.nn.CrossEntropyLoss参数形状
有一个问题,我使用nn.CrossEntropyLoss()作为损失函数: 准则= nn.CrossEntropyLoss()
模型的output.data是:
- 1.00000e -02 *
- 2.5552 2.7582 2.5368 ... 5.6184 1.2288 -0.0076
- 0.7033 1.3167 -1.0966 ... 4.7249 1.3217 1.8367
- 0.7592 1.4777 1.8095 ... 0.8733 1.2417 1.1521
- 0.1040 -0.7054 -3.4862 ... 4.7703 2.9595 1.4263
和targets.data [大小4x253的torch.FloatTensor]是:
- 1 0 0 ... 0 0 0
- 1 0 0 ... 0 0 0
- 1 0 0 ... 0 0 0
- 1 0 0 ... 0 0 0
- [大小4x253的torch.DoubleTensor]
当我打电话: 损耗=标准(输出,目标)
发生错误,信息是: 类型错误:FloatClassNLLCriterion_updateOutput接收的参数无效的组合 - 得到(int,torch.FloatTensor,torch.DoubleTensor,torch.FloatTensor,bool,NoneType,torch.FloatTensor),但预计(int state,torch.FloatTensor input,torch.LongTensor target,torch.FloatTensor output, bool sizeAverage,[torch.FloatTensor weight or None],torch.FloatTensor total_w为八个)
'预计torch.LongTensor' ...... '有torch.DoubleTensor',但如果我转换指标纳入LongTensor: torch.LongTensor(numpy.array(targets.data.numpy() ,numpy.long))
呼叫损失=标准(输出,目标),错误是:
RuntimeError:在/数据/使用者/ soumith/miniconda2 /康达-BLD/pytorch多目标不支持-0.1.10_1488752595704/work/torch/lib/THNN/generic/ClassNLLCriterion.c:20
我上次的练习是mnist,来自pytorch的一个例子,我做了一些修改,batch_size是4,损耗函数: 损耗= F.nll_loss(输出,标签) outputs.data:
-2.3220 -2.1229 -2.3395 -2.3391 -2.5270 -2.3269 -2.1055 -2.2321 -2.4943 -2.2996
-2.3653 -2.2034 -2.4437 -2.2708 -2。5114 -2.3286 -2.1921 -2.1771 -2.3343 -2.2533
-2.2809 -2.2119 -2.3872 -2.2190 -2.4610 -2.2946 -2.2053 -2.3192 -2.3674 -2.3100
-2.3715 -2.1455 -2.4199 -2.4177 -2.4565 - 2.2812 -2.2467 -2.1144 -2.3321 -2.3009
[尺寸为4×10的torch.FloatTensor]
labels.data:
- [大小的torch.LongTensor 4]
标签,对于输入图像,必须是单一元件,在上面的示例,存在是253个数字,在'mnist'中只有一个数字,输出的形状与标签不同。
我回顾了tensorflow手册,tf.nn.softmax_cross_entropy_with_logits, 'Logits和标签必须具有相同的形状[batch_size,num_classes]和相同的dtype(float32或float64)。
pytorch是否支持tensorflow中的相同功能?
许多THKS