pytorch 学习笔记(一)
来源:互联网 发布:学java看什么视频 编辑:程序博客网 时间:2024/06/10 15:21
pytorch 学习笔记(一)
pytorch
是一个动态的建图的工具。不像Tensorflow
那样,先建图,然后通过feed
和run
重复执行建好的图。相对来说,pytorch
具有更好的灵活性。
编写一个深度网络需要关注的地方是:
1. 如何保存参数
2. 如何构建网络
3. 如何计算梯度和更新参数
如何保存参数
pytorch
中有两种变量类型,一个是Tensor
,一个是Variable
。
- Tensor
: 就像ndarray
一样,一维Tensor
叫Vector
,二维Tensor
叫Matrix
,三维及以上称为Tensor
- Variable
:是Tensor
的一个wrapper
,不仅保存了值,而且保存了这个值的creator
,需要BP
的网络都是Variable
参与运算
- 1
- 2
- 3
- 1
- 2
- 3
(0 ,.,.) = 1.00000e-37 * 1.5926 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000(1 ,.,.) = 1.00000e-37 * 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000[torch.FloatTensor of size 2x3x4]
- 1
- 1
torch.Size([2, 3, 4])
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
(0 ,.,.) = 0.9815 0.0833 0.8217 1.1280 0.7810 1.2586 1.0243 0.7924 1.0200 1.0463 1.4997 1.0994(1 ,.,.) = 0.8031 1.4283 0.6245 0.9617 1.3551 1.9094 0.9046 0.5543 1.2838 1.7381 0.6934 0.8727[torch.FloatTensor of size 2x3x4]
- 1
- 2
- 3
- 1
- 2
- 3
True
自动求导
pytorch
的自动求导工具包在torch.autograd
中
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Variable containing: 2 4 6 8 10[torch.FloatTensor of size 5]
neural networks
使用torch.nn
包中的工具来构建神经网络
构建一个神经网络需要以下几步:
- 定义神经网络的权重
,搭建网络结构
- 遍历整个数据集进行训练
-将数据输入神经网络
- 计算loss
- 计算网络权重的梯度
- 更新网络权重
- weight = weight + learning_rate * gradient
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
Net ( (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1)) (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1)) (fc1): Linear (400 -> 120) (fc2): Linear (120 -> 84) (fc3): Linear (84 -> 10))
- 1
- 2
- 3
- 1
- 2
- 3
10
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
使用loss criterion 和 optimizer训练网络
torch.nn
包下有很多loss标准。同时torch.optimizer
帮助完成更新权重的工作。这样就不需要手动更新参数了
- 1
- 2
- 3
- 1
- 2
- 3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
整体NN结构
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
其它
- 关于求梯度,只有我们定义的Variable才会被求梯度,由
creator
创造的不会去求梯度 - 自己定义Variable的时候,记得Variable(Tensor, requires_grad = True),这样才会被求梯度,不然的话,是不会求梯度的
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
0 0
- pytorch 学习笔记(一)
- pytorch 学习笔记(一)
- pytorch 学习笔记(一)
- pytorch 学习笔记(一)
- Pytorch学习笔记(一)
- pytorch学习笔记(一) autograd
- Pytorch学习笔记(一):pytorch的安装-Ubuntu14.04
- pytorch学习笔记
- Pytorch学习笔记
- pytorch学习笔记
- PyTorch 学习笔记
- pytorch学习笔记(1)--pytorch张量
- 莫烦PyTorch学习笔记(一)——Torch或Numpy
- PyTorch入门学习(一)
- Pytorch学习笔记(二)
- Pytorch学习笔记(三)
- Pytorch学习笔记(四)
- Pytorch学习笔记(五)
- 多个文件打包下载 java
- 使用consul实现分布式服务注册和发现
- iOS开发小记:运用Runtime机制扩大UIButton的响应区域
- 「一句话经典」从Spring到SpringMVC再到JavaEE开发颠覆者Spring Boot,最后佛法无边Spring Cloud;只不过却成了nodejs的笑柄
- 筛法求素数
- pytorch 学习笔记(一)
- 【企业报表数据读取与传递】【第二节】报表数据读取规则界面开发
- js高级程序设计笔记7--DOM2和DOM3
- Android适配那点事儿
- pytorch学习笔记(二):gradient
- asp.net跳转并接收参数
- firefox浏览器相关的2个坑
- 【React全家桶入门之CODE】项目代码与使用方法
- 学习记录:python糗百爬虫