• Pytorch框架的学习(2)


    (16条消息) Pytorch框架的学习(1)_An efforter的博客-CSDN博客

    目录

     1.Tensor中统计学相关的函数

     2.统计学习中分布函数(以后学习)

    3.Tensor中的随机抽样

    4.Pytorch与线性代数运算

     5.Pytorch与张量的操作(裁剪、索引与数据筛选,组合与拼接、切片、变形、填充)

    裁剪


    (1条消息) Pytorch框架的学习(1)_An efforter的博客-CSDN博客

    (1条消息) Pytorch框架的学习(3)_An efforter的博客-CSDN博客 

    一、tensor函数的调用

     1.Tensor中统计学相关的函数

    1. import torch
    2. a=torch.rand(2,2)
    3. print(a)
    4. print(torch.mean(a))
    5. print(torch.sum(a))
    6. print(torch.prod(a))
    7. print(torch.max(a))
    8. print(torch.min(a))
    9. print(torch.argmax(a,dim=0))#最大值的索引对印的是0.5554与0.2172
    10. print(torch.argmin(a,dim=0))

    1. import torch
    2. a=torch.rand(2,2)*10
    3. print(a)
    4. print(torch.std(a))
    5. print(torch.var(a))
    6. print(torch.median(a))
    7. print(torch.mode(a))
    8. print(torch.histc(a,6,0,0)) #直方图函数的使用
    9. #a是数据,6代表6个块,最大值,最小值,默认是0

    1. #bincount只能处理1维的数据,可以用于统计某一类别样本的个数
    2. b=torch.randint(0,100,[10])
    3. print(b)
    4. print(torch.bincount(b)) #列表从0-9代表的值出现的频率

     2.统计学习中分布函数(以后学习)

    • distributions包含可参数化的概率分布和采样函数

           得分函数
                   强化学习中策略梯度方法的基础

           pathwise derivative估计器
                   变分自动编码器中的重新参数化技巧

    3.Tensor中的随机抽样

    定义随机种子
         torch.manual_seed(seed)

    定义随机数满足的分布
         torch.normal()

    1. import torch
    2. torch.manual_seed(1)
    3. mean=torch.rang(1,2)
    4. std=torch.rang(1,2)
    5. print(torch.normal(mean,std))

    torch.manual_seed(1)能够约束随机数。

     在运行一次也是这个数。如果不加torch.manual_seed(),每一次运行都是随机的数。

    4.Pytorch与线性代数运算

     (1).Tensor中的范数运算:

    •  在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。
    • 常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。

    0范数/1范数/2范数/p范数/核范数:

    • torch.dist(input, other, p=2)计算p范数
    • torch.norm()计算2范数

    p等于几就是几范数, 其中2范数就是欧式距离。

    1. import torch
    2. a=torch.rand(1,2)
    3. b=torch.rand(1,2)
    4. print(a,b)
    5. print(torch.dist(a,b,p=1)) #a与b之间的1范数
    6. print(torch.dist(a,b,p=2)) #a与b之间的2范数(欧氏距离)
    7. print(torch.dist(a,b,p=3))
    8. print(torch.norm(a))
    9. print(torch.norm(a,p=1)) #a的1范数
    10. print(torch.norm(a,p='fro'))#a的核范数

     (2).tensor中的矩阵分解

    常见的矩阵分解

    • LU分解:将矩阵A分解成L(下三角)矩阵和U(上三角)矩阵的乘积
    • QR分解:将原矩阵分解成一个正交矩阵Q和一个上三角矩阵R的乘积
    • EVD分解:特征值分解
    • SVD分解:奇异值分解

     特征值分解:

    • 将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法
    • 特征值VS特征向量

    PCA与特征值分解

    PCA:将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
    PCA算法的优化目标就是:

    • 降维后同一纬度的方差最大
    • 不同维度之间的相关性为0
    • 协方差矩阵

    奇异值分解:A就是奇异值

     LDA与奇异值分解

    找到一条线,能够使得同类的样本之间的距离尽可能小,而不同类的样本尽可能大。

     EVD分解VS SVD分解

    • 矩阵方阵且满秩(可对角化)
    • 矩阵分解不等于特征降维度
    • 协方差矩阵描述方差和相关性

    Pytorch中的奇异值分解

    • torch.svd()

     5.Pytorch与张量的操作(裁剪、索引与数据筛选,组合与拼接、切片、变形、填充)

    裁剪

    (1).pytorch与张量的裁剪

    • 对Tensor中的元素进行范围过滤(1.将数据约束到小的范围中,我们的网络在训练的时候就会相对稳定,能够防止过拟合。2.loss值趋于稳定,达到最优解。3.通过对tensor的定点化/量化。)
    • 常用于梯度裁剪(gradient clipping),即在发生梯度离散或者梯度爆炸时对梯度的处理
    • a.clamp(2,10)

     clamp()函数让参数保持到2,5之间,约束参数自己调。如果说小2,约束之后是2,如果说大于5,那么约束为5.

    1. import torch
    2. a=torch.rand(2,2)*10
    3. print(a)
    4. a=a.clamp(2,5)
    5. print(a)

    (2).Pytorch与张量的索引与数据筛选

    • torch.where(condition, x, y)︰按照条件从x和y中选出满足条件的元素组成新的tensor;
    • torch.gather(input, dim, index, out=None):在指定维度上按照索引赋值输出tensor;
    • torch.index_select(input, dim, index, out=None):按照指定索引输出tensor;
    • torch.masked_select(input, mask, out=None):按照mask输出tensor,输出为向量;
    • torch.take(input, indices):将输入看成1D-tensor,按照索引得到输出tensor;
    • torch.nonzero(input, out=None):输出非O元素的坐标。

    torch.where():  如果是大于0.5讲选择a,反之选择b。

    1. a= torch. rand ( 2,2)
    2. b = torch.rand (2,2)
    3. print(a)
    4. print(b)
    5. out = torch . where(a > 0.5,a,b) #如果是大于0.5讲选择a,反之选择b
    6. print(out)

    torch.index_select(input, dim, index, out=None):按照指定索引输出tensor;

    1. a= torch. rand (4,4)
    2. print(a)
    3. out=torch.index_select(a,dim=0,index=torch.tensor([0,3,2]))
    4. print(out)

     torch.gather(input, dim, index, out=None):在指定维度上按照索引赋值输出tensor;

    1. a = torch .linspace ( 1,16 ,16).view( 4,4)
    2. print(a)
    3. out=torch.gather(a,dim=0,index=torch.tensor([[0,1,1,1],
    4. [0,1,2,2],
    5. [0,1,3,3]]))
    6. print(out)

    torch.masked_select(input, mask, out=None)

    1. a = torch .linspace ( 1,16 ,16).view( 4,4)
    2. mask=torch.gt(a,8) #a>8为 true
    3. print(out)
    4. print(mask)
    5. out=torch.masked_select(a,mask)
    6. print(out)

     torch.take()根据索引找出值

    1. a = torch .linspace ( 1,16 ,16).view( 4,4)
    2. print(a)
    3. b=torch.take(a,index=torch.tensor([0,15,13,10]))
    4. print(b)

    torch.nonzero(a) 非零元素的找出坐标

    1. a = torch. tensor([[0,1,2,0],[2,3,0,1]])
    2. print(a)
    3. out = torch. nonzero(a) #打印的是非0元素的坐标
    4. print (out)

  • 相关阅读:
    数据工程师&数据分析师这两个岗位有什么区别?有没有发展前景?
    使用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包
    【建议背诵】软考高项考试案例简答题汇总~(3)
    WebService SOAP1.1 SOAP1.12 HTTP PSOT方式调用
    【数据结构】F:B DS图_课程表 拓扑排序实现
    查找或替换excel换行符ctrl+j和word中的换行符^p,^l
    html + thymeleaf 制作邮件模板
    考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(Matlab代码实现)
    【Hadoop】学习笔记(四)
    Nginx配置反向代理
  • 原文地址:https://blog.csdn.net/qq_40694323/article/details/126651743