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

相关推荐
jufeng130711 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 7 篇】
python·ai agent·权限系统
梦想很大很大11 小时前
如果有一个本地优先的 Workflow 工具,你们团队会愿意用吗?
python·agent·workflow
用户83562907805111 小时前
Python 自动化 Word 文本框处理:创建、定位、填充内容与管理
后端·python
数据知道13 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
努力的小Qin13 小时前
梯度下降如何实现参数优化:从线性回归到 Sigmoid 分类
人工智能·python·神经网络
strength_zhou201313 小时前
Python检查MongoDB索引列中的字段是否存在
python·mongodb
zander25813 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
for_ever_love__14 小时前
python基础语法学习: 文件操作
python·学习
青春不败 177-3266-052014 小时前
基于R、Python的Copula变量相关性分析及AI大模型应用
人工智能·python·r语言·贝叶斯·统计学·copula
汤姆yu15 小时前
基于python大数据的高校舆情监测系统的设计与实现
大数据·开发语言·python·分享·分析·舆情