将PyTorch的学习过程记录下来。
什么是PyTorch
入门
张量与操作
1 | import torch |
注意:torch包中带有下划线的op说明是就地进行的
Nmupy转换
将Torch张量转化为numpy数组
1 | import torch |
将numpy数组转化为Torch张量
1 | import torch |
CUDA传感器
cuda传感器是一个基于Python的科学计算包,主要分入如下2部分:
- 使用GPU的功能代替numpy
- 一个深刻的学习研究平台,提供最大的灵活性和速度
1 | # CUDA传感器 |
Autograd:自动分化
autograd包是PyTorch
所有神经网络的核心。
autograd
包为Tensors
上的所有操作提供了自动区分。它是一个逐个运行的框架,这意味着您的backprop
由您的代码运行定义,每一次迭代都可以不同。
变量
autograd.Variable
是包的中央类。它包含一个Tensor
,并支持几乎所有定义的操作。完成计算后,可以调用.backward()
并自动计算所有梯度。
变量与变量是有创造关系的,你可以对这些关系组成的函数求导。
创造一个变量:
1 | import torch |
输出:
1 | tensor([[1., 1.], |
做一个变量的操作:
1 | y = x + 2 |
输出:
1 | tensor([[3., 3.], |
y
是由于操作造成的,所以它有一个创造者。
1 | print(y.creator) # 报错,已替换为grad_fn |
输出:
1 | <AddBackward0 object at 0x00000226055E8940> |
对y进行更多的操作
1 | z = y * y * 3 |
输出:
1 | tensor([[27., 27.], |
梯度
1 | out.backward() |
打印梯度 d(out)/dx
1 | print(x.grad) |
输出:
1 | tensor([[4.5000, 4.5000], |
自动求导可以做很多疯狂的事情
1 | x = torch.rand(3) |
解释:
y.data.norm()
是用来求y的二范数
y的二范数小于1000的约束条件下,y的公式其实是 y = 1024*x
输出:
1 | tensor([591.5636, 884.0807, 773.9807], grad_fn=<MulBackward0>) |
1 | gradients = torch.FloatTensor([0.1, 1.0, 0.0001]) |
输出:
1 | tensor([1.0240e+02, 1.0240e+03, 1.0240e-01]) |
LeNet:
显示CIFAR数据集图片
1 | import torchvision |
定义网络
等先把基础写完再继续补充😄
未完待续!!!