AI大模型入门-pytorch-张量2 tensor创建

视频链接:

不如语冰

不如语冰的个人空间-不如语冰个人主页-哔哩哔哩视频

文章 代码链接:

GitHub - zyf-ngu/Qmatter: 跟着问题学-AI大模型入门系列笔记和代码 · GitHub

张量 tensor创建

首先来谈一下张量的创建,创建的方法有2大类,一是由现有的数据直接转化而来,称为转化法;二是利用各种api函数传入想要创建张量的维度和形状,称为api法。

转化法torch.tensor()和torch.from_numpy

转化法是从现有的数据转化而来,现有的数据从哪里来呢?主要有2种:

(1)tensor()括号里的数据可以是列表list(以"\[\]"表示),即需要什么手动写什么,很少用;

(2)也可以是numpy,即先用numpy创建一个numpy数组,然后直接导入(如下);

torch.tensor(1)

arr = np.array(\[1, 2, 3, 4, 5, 6])

t = torch.tensor(arr, device='cuda')

值得注意的点:

(1)注意数据类型,有时候需要在数字后面加"."表示float,因为求导时候需要float类型;

(2)可以添加device='cuda'获得加速。

上述从numpy导入的数据是不共享内存的,还有一种导入方法:torch.from_numpy创建的tensor和原来的numpy共享内存,也即是说修改tensor就会修改原来的numpy。如下

arr = np.array(\[1, 2, 3, 4, 5, 6])

t = torch.from_numpy(arr)

arr0, 0 = 0

t0, 0 = -1

Api法

特殊 数字 torch.zeros()/ones()/eye()/full()

此类方法的共性就是利用给定的api函数,如zeros,ones,eyes,full,然后在参数里指定想要创建的张量的形状(用元组表示),即可完成创建。

(1)torch.zeros/ones(shape)创建全0/1张量: tensor3 = torch.zeros/ones(2, 3)

(2)torch.full(shape,value)创建值全相同的张量: t = torch.full((3, 3), 2)

(3)torch.eye(shape)创建单位对角矩阵

(4)torch.zeros_like(tensor),torch.ones_like(tensor),torch.full_like(tensor,value)创建和参数张量(本质用真实的张量形状代替指定的形状)一致的全0/1张量。

等差均分 torch.arange&linespace

此类方法创建的是一维张量,

(1)torch.arange(start,end,step)创建等差数列张量,step为等差值,默认为1,取值时[start,end)左闭右开,形状大小=(end-start)/step。

t = torch.arange(2, 10, 2)

(2)torch.linspace(start,end,n),代表创建的张量在start,end中数值均分n等份,这时会出现小数。左右均闭。 t = torch.linspace(2, 10, 6)

(3)torch.logspace(),等log创建,在对数尺度上从 start 到 end 均匀取 steps 个点,再通过底数 base 转换为线性尺度的数值。tensor11=torch.logspace(0,2,5) # 1.0000, 3.1623, 10.0000, 31.6228, 100.0000

概率

此类方法的本质是依据想要使用的概率分布来创建符合要求的张量,关键还是确定张量的形状。

以正态分布为例:首先参数要有概率分布的超参数,比如正态分布标准值和方差,然后根据超参数的类型(可以是标量和张量(float类型))来决定是否需要额外指定张量的形状。

以 mean,std的组合为例,共有四种模式(2*2)。

mean1=torch.arange(1,5) mean2=2.0;std1=torch.ones(3,1) std2=0.3

模式1: mean为张量,std为标量------输出形状以mean的形状为准:tensor1=torch.normal(mean1,std2)

模式2: mean为标量,std为张量------输出形状以std的形状为准:tensor2=torch.normal(mean2,std2)

模式3: mean和std均为标量------必须指定输出张量的形状(size参数)tensor3=torch.normal(mean2,std2,size=(2,3))

模式4: mean和std均为张量,形状需要可广播,否则会引发运行时错误

tensor_normal3=torch.normal(mean1,std1)

在实际应用中,最常用的是模式3(两个标量参数+指定形状)和模式1(一个张量均值+标量标准差)。

对于mean和std均为标量,多维张量的每个元素都是独立的正态分布样本,整体均值会接近设定的均值,整体标准差接近设定的标准差;维度不影响分布规律,仅决定张量的形状(如 (2,3) 表示 2 行 3 列的样本集合)。

对于mean或std为张量,创建张量逐元素对应:目标张量中位置 (i,j) 的元素,服从以 meani,j 为均值、stdi,j 为标准差的正态分布。

(1)torch.randn(shape),torch.randn_like(tensor)创建标准正态分布张量;

(2)torch.rand(shape),torch.rand_like(tensor)创建0,1均匀分布。

(3)torch.randint(low,high),torch.randint_like(tensor,low,high)创建[low,high)均匀分布。

(4)torch.randperm(n),创建从0到n-1的随机排列张量

(5)torch.bernoulli(input),创建以input为概率值的伯努利分布张量。

相关推荐
NPE~1 小时前
[AI]Agent开发——ADK框架使用
人工智能·python·ai·教程·adk·agent开发
矮个史蒂芬1 小时前
统计verilog .v文件中output 的bit数
python
gwf2162 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
爱吃提升2 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi2 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
元Y亨H3 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
金銀銅鐵4 小时前
[Python] 用 turtle 来绘制瑞典国旗
python
Albert Edison4 小时前
【GUI 自动化测试】Pywinauto 常见操作
自动化测试·python·pywinauto
海兰4 小时前
【高速缓存】RedisVL为文本生成嵌入向量实践指南
人工智能·python·机器学习