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为概率值的伯努利分布张量。

相关推荐
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1233 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero073 天前
Jev 与 Laya
python·语言模型