Pytorch听课笔记

一、pytorch数据类型

1.pytorch数据类型

Pytorch数据类型(CPU上的):torch.IntTensor,torch.FloatTensor,torch.ByteTensor(比较两种类型用)
Pytorch数据类型(GPU上的):torch.cuda.IntTensor,torch.cuda.FloatTensor,torch.cuda.ByteTensor(比较两种类型用)
表示string的话一般常用独热法(让结果与数值和string无关)

2.Type check(类型检验,常用isinstance)

3.标量:torch.tensor(2.2){经常用它表示loss用}

4.标量的dimention检查

5. Dimention为1的张量(向量)

Dimention为1的张量:torch.tensor([1.1]);torch.FloatTensor(2){随机生成一个长度为2向量}{bias(神经元的输入),LinearInput常用}

6. 向量的dimention检查(同标量)

7.dimention size/shape tensor的区别

Dimention是维度用dim输出,size/shape是维度和宽度(具体形状),numel可以看数据的个数,tensor是里面的具体值,size/shape可以索引

二、创建Tensor

1.数据在numpy中了

2.数据在list中了

FloatTensor()=Tensor,tensor()里面只能放一个list
FloatTensor([ ])里面可以放list和tensor一样{别用},FloatTensor(2,3)随机一个两行三列的数据

3.未初始化数据

4.未初始化的问题:数据非常不规则,大的大,小的小

5.Tensor按设置不同可能代表FloatTensor也可能代表IntTensor等等

6.随机初始化(解决未初始化的问题)

rand():[0,1]内取,rand_like()接受tensor把tensor读出来再rand,randint(1,10)在1,10内random[1,10)

正态分布randn(3,3)三行三列,每个元素都是正态分布里面的值,torch.normal()自定义均值方差

7.把tensor全部赋值成1个值(full)

注意dimention是1与标量的区别

8.arange/range等差数列

arange(0,10) [0,10)
arrange(0,10,2) 0开始间隔为2

9.linspace/logspace

linspcae(0,10,steps=4) [0,10]里面等分切出四份
logspace(0,-1,steps=10) 10的0到10的-1次方里面分出十个

10.ones/zeros/eye eye只能接受一个或两个参数

11.randperm 协同shuffle

三、索引与切片

1.Indexing(从前往后默认)

2.select fist/last N

a[:2] [0,2) 取标号为0,1的两张图片
a[:2,:1,:,:] 取标号为0,1的两张图片的第一个通道上面的数据,后面两个:可写可不写
a[:2,1:,:,:] 取标号为0,1的两张图片的第二第三个通道上面的数据,后面两个:写可不写
a[:2,-1:,:,:] 取标号为0,1的两张图片的第三个通道上面的数据,后面两个:写可不写

3.间隔取样

一个单独“:” 表示all,“:n” 表示[0,n),“n:”表示[n,末尾),“n:m”表示[n,m)
“0:28”=“0:28:1”,“0:28:2”=“::2”(数据为28列时) “::1”=“:”
a[:,:,0:28:2,0:28:2] 两个冒号隔行采样 [0,28)两个一采

4.选择具体的索引号

Code:
In:a.shape
Out:torch.Size(4,3,28,28)

In:a.index_select(0,torch.tensor([0,2])).size() 针对第一个维度选择第一和第三个
Out:[2,3,28,28]
In:a.index_select(1,torch.tensor([1,2])).size() 针对第二个维度选择第二和第三个
Out:[4,2,28,28]

5. “…”任意多维度(根据实际情况确定)

6.select by mask

7.select by flatten index

四、维度变换

1.view/reshape( 变前后size不变 prod(a.size)=prod(a.size) )

view的形式不同理解的意义不同
假如view后之前的存储结构丢失,那么可能返回不回去原来的数据结构(看b)
view后如果tensor的sieze变了会报错

2.unsqueeze(加维度)

参数范围[-a.dim()-1,a.dim()+1) 此例子为[-5,5)
0a.dim():是在之前插入;-a.dim()-1-1:是在之后插入 只用正数范围就ok
一次只能改加一维且不能保存,要加多维几个unqueeze加点连用

3.squeeze(减维度)

不指定参数dimention为1的全部压没,参数的使用同unsqueeze
不能挤压掉不是1的维度

4.expand(维度不变扩张数据)

expand常用:不会主动的复制出去,只会在有需要的时候复制出去,速度快节约内存
原来为1的维度可以扩张成N维,但是原来不是1的扩张不了
保持不动的维度参数写-1

5.repeat(维度不变扩张数据)

repeat不常用:它必须要复制数据
参数是要cope的次数

6.转置(只能2D).t()

7.Transpose(维度交换)(不用)

8.permute(维度交换)

原来的位置放到要放的位置,看截图就懂了(In[98]) [b C H W]->[b H W C]

五、Broadcasting(类似于expand但是是自动的)

首先要补全后面的维度才可以。后面为小维度,前面为大维度

六、合并与分割

1.cat(合并)

第一个参数是列表,表示要合并的tensor;第二个参数是维度,在哪个维度上合并
除了要合并的维度数量可以不一样,其它维度的数量必须一样才能cat

2.stack(合并,但是在合并的维度前插入一个新的维度)

第一个参数是列表,表示要合并的tensor;第二个参数是维度,在哪个维度上合并
合并以后在合并维度之前出现一个维度控制,比如统计年级总成绩(每个班相加)时使用
所有维度必须都完全一致才可以使用

4.split(拆分)

根据长度来拆分,第一个参数是列表,里面元素个数表示要拆分出的块数,数值表示每个块的长度;第二个参数是维度,在哪个维度上拆分

5.chunk(拆分)

根据数量来拆分,第一个参数表示要拆分出来几个,第二个参数表示要在哪个维度上拆分

七、矩阵的运算

1.加减乘除(±/,add sub mul div //整除) 此为每个对应元素相乘,不是矩阵相乘

2.矩阵相乘(torch.matmul/@)(torch.mm只能二维)

eg1:
纬度变化矩阵w,第一个参数是要降维度,第二个参数是原来维度,然后转置w

eg2:
大于二维的话,只有最后两维相乘

3.求平方与开根

求平方pow(2)== **2 开根sqrt()== **0.5

4.关于e的运算exp log

5.几个小函数

floor()向下取整,ceil()向上取整,trunc()取整数部分,frac()取小数部分
round()四舍五入,

6.gradient clipping(用到再说)

八、属性统计

1.norm(求范数)返回tensor 不能用整型运算,要用float

1范数:所有元素绝对值加和 .norm(1)实现
2范数:所有元素绝对值的平方加和再开根号 .norm(2)实现

2.mean/sum/min/max/prod/argmax/argmin

mean均值 max最大值 min最小值 prod连乘 sum求和 argmax返回最大值的索引
argmin返回最小值的索引
min max argmax argmin都是要把数据打平成dimention为1以后再求

argmax(dim=1)可以在第二维求最大且返回索引

3.dim与keepdim

a.max(dim=1) 返回维度为1上的各数据的最大值及对应索引
a.argmax(dim=1)返回维度为1上的各数据的最大值的索引
a.max(dim=1,keepdim=True)返回维度为1上的各数据的最大值并且保持输出数据与原来维度一样

4.Top-k

返回最大的k个元素及其索引(最小的话就是直接largest参数设置为false)

5.kthvalue

返回第i小的数据

6.compare

;>=;<;<=;!=;==返回0,1(真为1,假为0)
torch.eq(a,b)返回每个位置相不相等,相等为1不相等为0
torch.equal(a,b){a,b相等返回true,不等返回false}

九、高阶操作

1.where

在GPU上加速完成循环任务

2.gather

快速完成对应任务

十、梯度

1.导数、偏微分是标量;梯度是向量,向量的方向代表函数在当前点增长的方向,向量的模代表函数在当前点增长的速率

2.找函数的极小值解

3.局部最小值

4.鞍点:在同一个点,可能是对于一个变量的局部最大值,对于另一个变量的局部最小值

5.会影响梯度下降的因素

(1)初始值的不同

(2)learning rate(学习率lr),一定要小
(3)局部最小值 如何逃离:增加一个惯量(惯性)

十一、常见函数梯度

1.线性函数

2.二次函数

3.指数函数

4.答案错了,都加个负号

十二、激活函数

1.激活函数

2.sigmoid/logistic函数

3.sigmoid/logistic函数求导(梯度)

4.Tanh函数

5.Tanh函数求导(梯度)

6.ReLU函数(Z>0时梯度永远是1,可以减少梯度离散和梯度爆炸的情况)

十三、LOSS及其梯度

1.均方差(MSE Mean Squared Error){是一种loss函数}

注意区分2范数与MSE的区别

2范数:所有元素绝对值的平方加和再开根号 .norm(2)实现

MSE:2范数的平方

2.MSE梯度求解

Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch的学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习的笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值