最近开始尝试用pytorch搭神经网络,踩了不少坑,开个帖子记录一下,如果有理解上的错误,请多多指出!
关于输入
1、pytorch的输入必须是float类型,在命令行里输入以下代码段可以验证
>>>import torch
>>>import torch.nn as nn
>>>a = torch.tensor([1, 2, 3])
>>>f = nn.Linear(3, 2)
>>>a = a.float()
>>>f(a)
直接执行b = f(a)会报错,告诉你需要float类型输入
2、pytorch按默认行处理输入,如果一个样本对应的输入为n维行向量v,对于m个输入,经过网络处理后的输出应有m行,列数等于输出的维数,通过下面的代码可以验证
>>>a = torch.tensor([[1, 2, 3], [4, 5, 6]])
>>>a = a.float()
>>>f = nn.Linear(3, 2)
>>>f(a)
>>>b = a[1]
>>>f(b)
f(a)的输出为tensor([[-3.0722, 1.8598],[-6.9518, 4.9386]])
f(b)的输出为tensor([-6.9518, 4.9386]),恰好是f(a)的第二行
关于损失函数
1、pytorch的CrossEntropyLoss()实际上是Log_Softmax()和NllLoss()的结合
默认有sof