pytorch学习

一、安装环境

  • 由于我直接使用的cpu
  • 因此按照官网的下载语句,pip3 install torch torchvision torchaudio,我是使用的pip install torch torchvision torchaudio,好像有xformers版本不匹配的问题,更新一下,pip install -U xformers
  • 需要注意的是,一定要在虚拟环境中才能使用torch
  • ctrl+shift+p在vscode中换解释器
  • 虽然在vscode中更换了解释器,但是使用语句还是会使用之前的解释器,索性直接在cmd中使用pip安装需要的包
  • 在cmd中激活虚拟环境,conda activate + Name
  • 在cmd中创建虚拟环境,conda create -n Name python==版本号

二、张量的创建

  • 直接将numpy的数组或者list转换成tensor
arr = np.ones((3,3))
t = torch.tensor(arr)
  • 或者根据torch.from_numpy()创建
  • 这样创建的张量和numpy数组是共享内存的。修改一个另一个也会变。
arr = np.ones((3,3))
t = torch.from_numpy(arr)
  • tensor.zeros()创建全0张量
out_t = torch.tensor([1])
t = torch.zeros((3,3),out = out_t)
  • torch.zeros_like()
  • 根据输入的形状创建全0张量
  • torch.ones()和torch.ones_like()创建全1张量
  • 自定义的全数值张量
  • torch.full((3,3),10)3*3的全10的张量,和torch.full_like()
  • 还有就是torch.arange(start,end,step),前闭后开
torch.arange(2,10,8)
>>>[2,4,6,8]
  • 均分数列torch.linspace(2,10,5),前闭后闭
torch.linspace(2,10,5)
>>>[2,4,6,8,10]
torch.linspace(2,10,6)
>>>[2.0000,3.6000,5.2000,6.8000,8.4000,10.0000]
  • 单位对角矩阵
  • torch.eye()
torch.eye(n = 3)#n是矩阵行数,默认为方阵,也可以设置m列数
  • torch.normal(mean,std),根据概率分布创建张量
  • 应为mean和std分别有标量和张量的两种形式,所以这个函数总共有4种形式
#张量,张量
mean = torch.arange(1,5,dtype=torch.float)
std = torch.arange(1,5,dtype=torch.float)
t_normal = torch.normal(mean,std)

#标量 标量
t_normal = torch.normal(0.,1.,size(4,))#注意这里要有size的参数

#张量 标量
mean = torch.arange(1,5,dtype=torch.float)
std = 1
t_normal = torch.normal(mean,std)
  • 使用==torch.randn(size = )==创建均值为0,标准差为1的标准正态分布随机采样的张量
import torch # 生成一个2x3的张量,其元素从标准正态分布中抽取 
x = torch.randn(2, 3)
-68%的值会落在-11(一个标准差)之间。
-95%的值会落在-22(两个标准差)之间。
-99.7%的值会落在-33(三个标准差)之间。

因此,虽然`torch.randn`生成的随机数理论上可以取任何值,实际使用时你会发现绝大多数值会位于-33之间。
  • torch.randn_like()

  • 常用的是==torch.rand()==和torch.rand_like()在【0,1)上生成均匀分布

import torch # 生成一个2x3的张量,其元素从0到1的均匀分布中抽取 
y = torch.rand(2, 3)
  • torch.randint()和torch.randint_like()也是【0,1),不过是整数

  • torch.randperm()生成0到n-1的随机排列

  • torch.bernoulli()伯努力分布

三、张量操作

  • torch.cat()和torch.stack()进行拼接
t = torch.ones((2,3))
t_0 = torch.cat([t,t],dim=0) #shape为(4,3)
t_1 = torch.cat([t,t],dim=1) #shape为(2,6)

#stack可以创建新维度进行拼接
t_2 = torch.stack([t,t],dim=2) #(2,3,2),在第三个维度上的堆叠两个t,则第三维度是2
t_3 = torch.stack([t,t],dim=0) #如果在已又维度上拼接,则会将其他的维度向后移动
  • torch.chunk(input,dim=,chunks=)
a = torch.ones(2,5)
list_of_tensors = torch.chunk(a,dim=1,3) #就是按照列砍两刀,是一个列表
#大小为5/3向上取整
  • torch.split()
    在这里插入图片描述

  • 张量的索引index_select()
    在这里插入图片描述

  • 注意是对整行整列的索引

  • masked_selext()
    在这里插入图片描述

  • 注意返回值是一维的张量

  • ge()方法表示大于等于,gt表示大于,le()表示小于等于,lt()表示小于

  • 张量改变形状,torch.reshape()
    在这里插入图片描述

  • 注意,当张量在内存中是连续的,则共享内存

  • 当碰到-1的时候表示该维度不需要关心,由其他维度计算而来

  • 交换张量的两个维度troch.transpose(input,dim=,dim=)
    在这里插入图片描述

  • 压缩和扩张torch.squeeze(dim=)
    在这里插入图片描述

  • 意思就是直接移除长度为一的轴,注意当且仅当

四、张量的数学运算

  • 有大量加减乘除的运算

  • torch.add()
    在这里插入图片描述

  • 以及加法结合乘法和除法
    在这里插入图片描述

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值