深度学习导论(3)PyTorch基础

介绍了PyTorch基础,包括以下内容:一. Tensor-Pytorch基础数据结构; 二. Tensor索引及操作; 三. Tensor与Numpy的互操作; 四. Tensor on GPU; 五. Tensor operations

一. Tensor-Pytorch基础数据结构

  1. 可以把Tensor理解为多维数组

  2. 深度学习任务: 将数据从分阶段从一种形式转换成另一种形式(用浮点数表示)。
    在这里插入图片描述

  3. 深度学习小例子:
    在这里插入图片描述

如图所示,图片中有大海和太阳,图片的原始形态实际上就是对像素的采样出来的一个矩阵,在这个矩阵中,每个元素都是[0, 255]的像素值(机器学习或者深度学习中一般将将其浮点数化,即将其变为[0, 1]或者[-1, 1])。将这张图片放入神经网络中,结果出来的OUTPUT为一个矩阵Softmax,矩阵中的向量值范围为[0, 1]。其中每个向量代表着对应标签的概率值,例如“太阳”、“海边”、“风景”等等。从以上例子可以看出,深度学习其实就是根据样本评判标签的过程。

二. Tensor索引及操作

1. Tensor索引类型

Tensor索引类型
(1) Scalar
称为0维的Tensor。如上图所示,“3”就是一个标量。
(2) Vector
称为1维的Tensor。如上图所示,X[2]代表Vector中第3个元素,即“5”。
(3) Matrix
称为2维的Tensor。如上图所示,X[1, 0]代表Matrix中第3行第1列的元素,即“7”。
(4) 3-D Tensor
可以将其理解为将多个向量“摞”起来。如上图所示,X[0, 2, 1]代表3-D Tensor中第1个矩阵的第3行第2列的元素,即“5”。(注: 对于不同的任务,怎么表示是由自己定义的,例如X[0, 2, 1]也可以代表3-D Tensor中第1个矩阵的宽度为3,高度为2的元素,即“3”。)
(5) 多维Tensor
多维的Tensor。如上图所示,X[…]代表从最外围的一层一直延伸到最里边一层的元素。

注:Tensor与List(Tuple)的区别:
在这里插入图片描述

  • List(Tuple): 在内存中单独分配的对象集合;
  • Tensor: 将向量和矩阵推广到任意维度,也可以理解为多维数组。在内存中连续存储的一组元素(非对象);
  • 一些操作如dot,mul等不能针对list进行。
    如: 一个包括100万个浮点数的一维Tensor需要存储400万个连续字节,加上少量元数据(维度、数字类型等)的开销。

2. Tensor基础操作

查看conda环境有哪些:

conda env list

在图形界面启动Jupyter Notebook
(1) 生成一个每个元素都为1的矩阵
在这里插入图片描述

(2) 生成一个三行三列的矩向量
在这里插入图片描述

(3) Scalar(0-D Tensors): 0维的Tensor
在这里插入图片描述

(4) Vectors(1-D Tensors): 1维的Tensor,即向量的形式
在这里插入图片描述

(5) Matrix(2-D Tensors): 2维的Tensor,即矩阵的形式
在这里插入图片描述

(6) 4-D & 5-D Tensors
在这里插入图片描述

注:

  • 4-D举例: 642242243: 其中224224表示的是图像的宽和高,3表示的是RGB图像的通道数,64代表每个批次的样本数(往模型当中送数据时,并不是一个一个往里送,而是分批次往里送,即一个batch一个batch往里送,一个batch可能是32个、64个、256个或者1024个样本)。
  • 5-D Tensors: 视频,多了一个“帧”的维度。首先是最外边的维度“batch”,即每个批次的样本数; 然后是“t”,即帧; 然后是“h”和“w”,即图像的高和宽然后是“c”,即通道数。即 [batch, t, h, w, c]。

3. 数值类型

(1) 32位浮点型
torch.float32 or torch.float——32-bit floating-point

(2) 64位浮点型
torch.float64 or torch.double——64-bit, double-precision floating-point

(3) 16位浮点型
torch.float16 or torch.half——16-bit, half-precision floating-point

(4) 8位整型(有符号)
torch.int8——Signed 8-bit integers

(5) 8位整型(有符号)
torch.uint8——Unsigned 8-bit integers

(6) 16位整型(无有符号)
torch.int16 or torch.short——Signed 16-bit integers

(7) 32位整型(有符号)
torch.int32 or torch.int——Signed 32-bit integers

(8) 64位整型(有符号)
torch.int64 or torch.long——Signed 64-bit integers

4. 数值类型操作

(1) 使用dtype指定数值类型
在这里插入图片描述

(2) 使用dtype获取数值类型
在这里插入图片描述

(3) 数值类型转换
在这里插入图片描述

(4) to方法
在这里插入图片描述

(5) type方法
在这里插入图片描述

  1. 数据索引操作
    (1) 取出所有元素
    在这里插入图片描述

(2) 取出第2~4个元素
在这里插入图片描述

注: 切片操作为左闭右开

(3) 取出第2~最后一个元素
在这里插入图片描述

(4) 取出第一~第4个元素
在这里插入图片描述

(5) 取出第一个~倒数第二个元素
在这里插入图片描述

(6) 取出第2~4个元素,步长为2(隔一个一取)
在这里插入图片描述

三. Tensor与Numpy的互操作

1. 小案例

(1) 导入大熊猫图片,并查看size
在这里插入图片描述

(2) 取出第0个通道,并转换成numpy的形式
在这里插入图片描述

(3) 局部截取(切片操作),高: 25~175; 宽: 60,130; 第0个通道切片
在这里插入图片描述

2. 序列化Tensor-torch方式

在这里插入图片描述

注: PyTorch使用pickle序列化Tensors对象,存储的文件其它应用无法使用。

3. 序列化Tensor-h5py方式

在这里插入图片描述

注: 序列化成为h5py形式的数据时,任何类型的框架或者方法都可以读,但是只能用Tensor或者PyTorch来存储或者打开。

四. Tensor on GPU

在这里插入图片描述

五. Tensor operations

  • Tensor reshaping
  • Broadcasting
  • Tensor product

注: 神经网络完全由Tensor operations组成

1. Tensor reshaping(变形操作,非常重要)

在这里插入图片描述

注: view(1, -1),其中前面的“1”表示将其变为1行,后面的“-1”表示如果不知道有几列,那么直接用“-1”代替即可,相当于“b = a.view(1, 6)”。

2. Broadcasting(广播)

在这里插入图片描述

3. Tensor product(乘法运算)

  • torch.dot: 向量点积(只能用于一维的向量)。
  • torch.mul: element product(相当于直接使用“*”)。
  • torch.mm: 按照矩阵乘法规则运算(相乘的两个元素需要满足一定的维度(size)要求)。
  • torch.matmul: torch.mm的broadcasting版本。

(1) torch.dot
在这里插入图片描述

  • 上图中“a*b”即为dot操作,即点积操作。

(2) torch.mul
在这里插入图片描述

注: a被定义完是Python中List的形式,所以必须要转换成Tensor的形式

(3) torch.mm
在这里插入图片描述

(4) torch.matmul
在这里插入图片描述

4. 自动求导

在这里插入图片描述

(1) requires_grad
在这里插入图片描述

  • 如果将Tensor的.require_grad属性设置成True,则将会跟踪对该Tensor的所有操作,计算结束以后调用.backward()将会自动计算所有梯度。该Tensor的梯度将会累积到.grad属性中。
  • 如果不想跟踪对Tensor的操作,可以将代码块封装到“with torch.no_grad()”中,如在测试过程中不需要计算梯度。

(2) grad_fn
在这里插入图片描述

  • 该属性指向创建该Tensor的函数。

(3) backward()
在这里插入图片描述

注: 调用该方法计算梯度,如果Tensor为标量,则该方法不需要参数,如果Tensor为向量,则该方法需要一个tensor作为参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值