欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

张量简介与创建

发布时间:2025/4/5 编程问答 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 张量简介与创建 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、Tensor的概念

          一、张量(Tensor)

                    张量是一个多维数组,它是标量、向量、矩阵的高维扩展

         二、Tensor与Variable

                   torch.autograd.Variable(包含data、grad、grad_fn、requires_grad、is_leaf)

            Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导

            data: 被包装的Tensor

            grad: data的梯度

            grad_fn: 创建Tensor的Function,是自动求导的关键

            requires_grad: 指示是否需要梯度

            is_leaf: 指示是否是叶子节点(张量)

         三、Tensor

            PyTorch0.4.0版开始,Variable并入Tensor

                   dtype: 张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor

                   shape: 张量的形状,如(64,3,224,224)

                   device: 张量所在设备,GPU/CPU,是加速的关键

            torch.Tensor(含有data,dtype,shape,device,requires_grad,grad,grad_fn,is_leaf几个模块)

 

二、Tensor创建一:直接创建

1、torch.tensor()功能: 从data创建tensordata: 数据可以是list,numpy dtype: 数据类型,默认与data的一致 device: 所在设备,cuda/cpu requires_grad: 是否需要梯度 pin_memory: 是否存于锁页内存torch.tensor(data,dtype=None,device=None,requires_grad=False,pin_memory=False )example:import numpy as np import torcharr = np.ones((3, 3)) print(arr.dtype) print(torch.tensor(arr))2、torch.from_numpy(ndarray)功能: 从numpy 创建 tensor 注意事项: 从torch.from_numpy 创建的tensor于原ndarray共享内存,当修改其中一个的数据,量竵一个也将会被改动example:arr = np.array([[1, 2, 3], [4, 5, 6]]) t = torch.from_numpy(arr) print(arr) print(t)arr[0, 0] = 0 print(arr) print(t)arr[0, 0] = -1 print(arr) print(t)

三、Tensor创建二:  依据数值创建

1、torch.zeros()功能: 依size创建全0张量size: 张量的形状,如(2,3),(3,244,244) out: 输出的张量 layout: 内存中布局形式,有strided,sparse_coo等 device: 所在设备,gpu/cpu requires_grad: 是否需要梯度torch.zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False )example:out_t = torch.zeros((3, 3)) print(out_t)2、torch.zeros_like()功能: 依input形状创建全0张量input: 创建与input同形状的全0张量 dtype: 数据类型 layout: 内存中布局形式torch.zeros_like(input,dtype=None,layout=None,device=None,requires_grad=False )3、torch.ones() 4、torch.ones_like()5、torch.full()torch.full(size,fill_value,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False )6、torch.full_like()功能: 依input形状创建全0张量 size: 张量的形状,如(3,3) full_value: 张量的值7、torch.arange()功能: 创建等差1维张量 注意事项: 数值区间[start,end) start: 数列起始值 end: 数列结束值 step: 数列公差,默认为1torch.arange(start=0,end,step=1,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)8、torch.linspace()功能: 创建均分的1维张量 注意事项: 数值区间[start,end] start: 数列起始值 end: 数列结束值 steps: 数列长度torch.linspace(start,end,steps=100,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)9、torch.logspace()功能: 创建对数均分的1维张量 注意事项: 长度为steps,底为basestart: 数列的起始值 end: 数列的结束值 steps: 数列长度 base: 对数函数的底,默认为10torch.logspace(start,end,steps=100,base=10,out=None,dtype=None,layout=torch.strided,device=None,requres_grad=False)10、torch.eye()功能: 创建单位对角矩阵(2维张量) 注意事项: 默认为方阵 n: 矩阵行数 m: 矩阵列数

四、Tensor创建三:  依据概率创建

1、torch.normal()功能: 生成正态分布(高斯分布)mean: 均值 std: 均方差四种模式: mean为标量 && std为标量 mean为标量 && std为张量 mean为张量 && std为标量 mean为张量 && std为张量2、torch.randn()torch.randn(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)3、torch.randn_like()功能: 生成标准正态分布 size: 张量的形状4、torch.rand()torch.rand(*size,out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)5、torch.rand_like()功能: 在区间[0,1)上,生成均匀分布6、torch.randint()torch.randint(low=0,high,size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)7、torch.randint_like()功能: 区间[low,high)生成整数均匀分布 size: 张量的形状8、torch.randperm()功能: 生成从0到n-1的随机排列torch.randperm(n, out=None,dtype=torch.int64,layout=torch.strided,device=None,requires_grad=False)9、torch.bernoulli()功能: 以input为概率,生成伯努力分布(0-1分布,两点分布) input:概率值torch.bernoulli(input,*,generator=None,out=None)

 

总结

以上是生活随笔为你收集整理的张量简介与创建的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。