pytorch基础知识

学习资料:https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%BA%8C%E7%AB%A0/index.html

日期:20220517

张量

自己理解:张量就是0到N维的数组,可以是常数,可以是数组,也可以是矩阵,或者多维数组,三维张量例如RGB图。它是数据的容器。

 torch.Tensor是存储和变换张量的主要工具

基本操作

1. new操作

2. 更多的new操作(可以看出x2和x并非同一个存储地址)

3. 失败的类型转换


4.  x.size()等价于x.shape

基本运算

1. 张量加法:x+y 或者 torch.add(x, y) 或者 x.add_(y)

2. 索引操作:x[:, 1]

3. 改变张量shape

x=torch.randn(4,4)

y=x.view(16)

z=x.view(-1,8)# -1是指这一维的维数由其他维度决定

副本和拷贝


用clone操作,类似于python的copy,参考https://pytorch.org/docs/stable/generated/torch.clone.html


广播机制

当两个张量的shape不同时,且做运算时,会自动触发广播操作,复制成相同的shape,再做运算。

留一个问题:为什么pytorch要设计广播机制?在哪些场景中经常会用到呢?

自动求导

autograd包是pytorch最核心的package,它为张量上所有的运算(操作),都提供了自动求导。它是define-by-run的框架

define-by-run:如何理解?留下这个小问题。

1. 三个步骤:tensor操作、requires_grad=true、.backward()求导

2. detach()方法:可以取消数据追踪、保护隐私;也可以在评估过程中停用,优化内存和运算时间;

3. acyclic graph:编码一个张量的完整计算过程

演示

思考:理解反向传播和pytorch实现原理

参考youtube上的讲解,https://www.youtube.com/watch?v=ma2KXWblllc

并行计算

简而言之,就是用多个GPU来并行计算,总结一些要点:

1. gpu和cpu之间数据传输较慢

2. 简单运算尽量用cpu

3. gpu需要指名,否则会默认为第一块,导致OOM

4. 并行化方法:Network partitioning、Layer-wise partitioning、Data parallelism 主要考虑通信开销

youtube

遗留问题

1. 熟练推导反向传播的原理

2. pytorch是如何实现autograd的?

3. 熟练部署多gpu的几种方式

你可能感兴趣的:(pytorch基础知识)