笔记:
1.标签一般默认为LongTensor
2.pytorch只能处理2维的数据。
字典:
找到一份很好的pytorch中文文档:http://pytorch-cn.readthedocs.io/zh/latest/
1.nn.CrossEntropyLoss()
EXP:loss_func = torch.nn.CrossEntropyLoss()
交叉熵:通常用在分类问题上
目标标签为: y = [0, 0, 0, 1]
实际结果为: out = net(x) = [1,2,3,4]
将输出转发为概率:out = F.softmax(out)=[0.1, 0.2, 0.3, 0.4]
计算二者的误差: loss = loss_func(out, y)
2.nn.Sequential()
EXP:
net = torch.nn.Sequential(
torch.nn.Linear(2,10)
torch.nn.ReLu()
torch.nn.Linear(10,2)
)
一种简单的神经网络构建方式,直接按顺序垒神经层。
3.optim.SGD()
EXP:optimizer = torch.optim,SGD(net.parameters(),lr=0.1)
优化方法采用:随机梯度下降法(Stochastic Gradient Descent,简称SGD)
4.optim.step()
EXP:
loss.backward()
optimizer.step()
一般用在反向传播后,将参数更新。
5..save()
EXP:torch.save(net,”net.pkl”) #保存整个神经网络
EXP:torch.save(net.state_dict(),”net_parameters.pkl”) #保存整个神经网路的parameters
defsave(obj,f,pickle_module=pickle,pickle_protocol=DEFAULT_PROTOCOL):
f:保存到的文件
6..load()
EXP:torch.load(“net.pkl”) #导入神经网络
7..load_state_dict()
EXP:net2 =
net = torch.nn.Sequential(
torch.nn.Linear(2,10)
torch.nn.ReLu()
torch.nn.Linear(10,2)
)
net.load_state_dict(torch.load(net_parameters.pkl))
需要先构建一个结构相同的神经网络,再导入参数,一般比直接导入整个神经网络更快。
8..linspace(start,end,steps=100,out=None)
steps指生成的个数,输出的一维张量应该是递增的
9..logspace(start,end,steps=100,out=None)
生成 10start 到 10end之间的数。
10.torch.unsqueeze()
EXP:X = torch.unsqueeze(torch.linsapce(-1,1.100),dim=1)
torch只能处理二维的数据,用来将数据转为2维的。
11.torchvision.transforms
用于预处理数据
torchvision.transforms.ToTensor()
将PIL Image 或 numpy.ndarry转换位Tensor,范围从[0,255]映射到[0.0,1]
torchvision.transforms.Normalize(mean,std)
EXP:torchvision.transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
mean 每个channel的均值
std 每个channel到标准差
正则化处理:input[channel] = (input[channel] - mean[channel]) / std[channel]
torchvision.transforms.Compose()
EXP:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),
])
将多个transforms连接在一起
12.torch.index_select
def index_select(input, dim, index, out=None)
切片。官方example:
Example::
>>> x = torch.randn(3, 4)
>>> x
1.2045 2.4084 0.4001 1.1372
0.5596 1.5677 0.6219 -0.7954
1.3635 -1.2313 -0.5414 -1.8478
[torch.FloatTensor of size 3x4]
>>> indices = torch.LongTensor([0, 2])
>>> torch.index_select(x, 0, indices)
1.2045 2.4084 0.4001 1.1372
1.3635 -1.2313 -0.5414 -1.8478
[torch.FloatTensor of size 2x4]
>>> torch.index_select(x, 1, indices)
1.2045 0.4001
0.5596 0.6219
1.3635 -0.5414
[torch.FloatTensor of size 3x2]
这里indices指要切片的索引的下标,例如[0,2]指待会儿切片为坐标为0和坐标为2的片。而dim指切片的维度,dim=0,指切片为横轴(结合indices,切片为横坐标为0和2的两片),dim=-1或1,指切片为纵轴(切片为纵坐标为0和2的两片)。