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

相关推荐
2601_962077602 分钟前
从零搭建Python接口自动化测试框架:pytest+requests实战指南
python·pytest·接口自动化·requests·框架搭建
stolentime28 分钟前
OpenClaw 2.0 新手快速上手与实战指南
爬虫·python·ai·网络爬虫
启观川36 分钟前
Python基础-第 16 章 综合案例:客户信息管理系统
开发语言·笔记·python·正则表达式
用户37215742613539 分钟前
如何使用 Python 给 PDF 添加附件:文档附件与附件注释
python
λqaq71 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存
天天被压力1 小时前
【零依赖量化数据实战 #31】沪深A实时盘口全景:逐笔·全盘实时·最新价·历史逐笔
java·人工智能·python
今天AI了吗1 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
前端·javascript·人工智能·python·深度学习·机器学习·easyui
“AI国潮设计-小江”1 小时前
《Python实战 | 用SDXL大模型生成“潮汕英歌舞”国潮IP头像,已申请外观专利,附Prompt思路!》
人工智能·python·prompt·aigc·scikit-learn
Zane19941 小时前
斐波那契数列加个装饰器,速度快了近五千倍:functools 三件套详解
后端·python
霸道流氓气质2 小时前
Spring AI提示词模板与动态变量替换
java·python·spring