Facebook 2017年1月发行的pytorch,越来越受到欢迎。相似于torch,却有着自己的优势。Torch和PyTorch的底层都是一个C语言实现的库函数。
1、模型save和load
model = CSRNet()
model = model.cuda()
save模型:model.cpu().state_dict() #只是把所有模型的参数都以OrderedDict的形式存下来。
torch.save(network.cpu().state_dict(), 't.pth')
pretrained_net = torch.load('t.pth')
for key, v in enumerate(pretrained_net):
print key, v
load模型:
checkpoint = torch.load(‘PartBmodel_best.pth.tar’)#torch.load 返回的是一个 OrderedDict
model.load_state_dict(checkpoint[‘state_dict’])
如果重新写这个网络的,比如使用Net_new,这个网络是将每一层都作为类的一个属性。如果直接load
new_network = Net_new()
new_network.load_state_dict(pretrained_net)
2、torch.nn.Conv2d()函数详解 对由多个输入平面组成的输入信号进行二维卷积
import torch
#输入 [ batch_size, channels, height_1, width_1 ]
#一个batch中样例的个数 2
#通道数,也就是当前层的深度 1
#图片的高 7
#图片的宽 3
x = torch.randn(2,1,7,3)
#[ channels, output, height_2, width_2 ]
#通道数,和上面保持一致,也就是当前层的深度 1
#输出的深度 8
#过滤器filter的高 2
#过滤器filter的宽 3
conv = torch.nn.conv2d(1,8,(2,3))
#[ batch_size,output, height_3, width_3 ]
#一个batch中样例的个数 2
#输出的深度 8
# 卷积结果的高度 6 = height_1 - height_1 + 1 = 7-2+1
# 卷积结果的宽度 1 = width_1 - width_2 +1 = 3-3+1
res = conv(x)
print(res.shape) # shape = (2, 8, 6, 1)
3、pytorch能自动反向传播。 前向传播时,能够自动记录每个操作的拓扑顺序,反向传播时则可以自动反向传播
torch.autograd提供实现任意标量值功能的自动区分的类和功能
4、
pytorch和torch的对比。pytorch将所有的Container都用autograd替代
pytorch的网络模块只有.weight和.bias。而那些梯度.gradInput和.output都被消除。
5、torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起
C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。此时需要注意:列数必须一致,即维数1数值要相同,这里都是3列,方能列对齐。拼接后的C的第0维是两个维数0数值和,即2+4=6.
C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。此时需要注意:行数必须一致,即维数0数值要相同,这里都是2行,方能行对齐。拼接后的C的第1维是两个维数1数值和,即3+4=7.