-
Tensor基础
2020-10-14 15:25:42Tensor(张量) ...(16,32,64位浮点型 ,8位 无符号整数型, 8,16, 32,64位 有符号整数型。布尔型) 该类的类属性和类方法见torch.Tensor 张量的创建 1、直接从数据构造tensor x = torch.tensor([5.5, 3]) prTensor(张量)
pyotch的核心的数据结构:torch.Tensor(python class, in torch.Tensor).
torch.Tensor 是一个包含单一数据类型的多维矩阵。torch定义了9种数据类型可以在cpu和GPU上运算。(16,32,64位浮点型 ,8位 无符号整数型, 8,16, 32,64位 有符号整数型。布尔型)
该类的类属性和类方法见torch.Tensor
张量的创建
1、直接从数据构造tensor
x = torch.tensor([5.5, 3]) print(x)
输出:
tensor([5.5000, 3.0000])
2、创建特定的tensor
创建一个未初始化矩阵:
x = torch.empty(5, 3) print(x)
输出:
tensor([[2.2391e-19, 4.5869e-41, 1.4191e-17], [4.5869e-41, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00]])
创建一个随机矩阵:
x = torch.rand(5, 3) print(x)
输出:
tensor([[0.5307, 0.9752, 0.5376], [0.2789, 0.7219, 0.1254], [0.6700, 0.6100, 0.3484], [0.0922, 0.0779, 0.2446], [0.2967, 0.9481, 0.1311]])
创建一个全0矩阵:
x = torch.zeros(5, 3, dtype=torch.long) print(x)
输出:
tensor([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]])
其他类似命令参考creation-ops
3、从现有的tensor建立新的tensor
根据已有的tensor建立新的tensor。除非用户提供新的值,否则这些方法将重用输入张量的属性,例如dtype等:
x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes print(x) x = torch.randn_like(x, dtype=torch.float) # 重载 dtype! print(x) # 结果size一致
输出:
tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.], [1., 1., 1.], [1., 1., 1.]], dtype=torch.float64) tensor([[ 1.6040, -0.6769, 0.0555], [ 0.6273, 0.7683, -0.2838], [-0.7159, -0.5566, -0.2020], [ 0.6266, 0.3566, 1.4497], [-0.8092, -0.6741, 0.0406]])
4、桥接numpy
Tensor和numpy可以相互转换。
Torch Tensor与NumPy数组共享底层内存地址,修改一个会导致另一个的变化。
Tensor转化为numpy:
输入:
a = torch.ones(5) print(a)
输出:
tensor([1., 1., 1., 1., 1.])
输入:
b = a.numpy() print(b)
输出:
[1. 1. 1. 1. 1.]
当tensor a改变时:
a.add_(1) #做加法 print(a) print(b)
输出:
tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
numpy数组相应改变
T
numpy转化为Tensor
同样的,numpy数组也会改变Tensor
import numpy as np a = np.ones(5) b = torch.from_numpy(a) np.add(a, 1, out=a) print(a) print(b)
输出:
[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
Tensor在CPU和GPU的转换
一般情况下可以使用.cuda方法将tensor移动到gpu,这步操作需要cuda设备支持
输入:
cpu_a=torch.rand(4, 3) cpu_a.type()
输出:
'torch.FloatTensor'
输入:
gpu_a=cpu_a.cuda() gpu_a.type()
输出:
'torch.cuda.FloatTensor'
使用.cpu方法将tensor移动到cpu
cpu_b=gpu_a.cpu() cpu_b.type()
输出:
'torch.FloatTensor'
如果我们有多GPU的情况,可以使用to方法来确定使用那个设备
#使用torch.cuda.is_available()来确定是否有cuda设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(device) #将tensor传送到设备 gpu_b=cpu_b.to(device) gpu_b.type()
输出:
cuda 'torch.cuda.FloatTensor'
-
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020-12-17 01:33:181. 扩展Tensor维度 相信刚接触Pytorch的宝宝们,会遇到这样一个问题... 参数说明:self:输入的tensor数据,dim:要对哪个维度扩展就输入那个维度的整数,可以输入0,1,2…… 1.2Code 第一种方式,输入数据后直接加u -
pytorch tensor创建
2020-11-20 10:11:16import torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshape(3,5))) print(torch.empty([3,4])) print(torch.ones([3,4]))...#3-10之间的随机整数 print(torch.randintimport torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshape(3,5))) print(torch.empty([3,4])) print(torch.ones([3,4])) print(torch.zeros([3,4])) #0-1之间的随机数 print(torch.rand([2,3])) #3-10之间的随机整数 print(torch.randint(3,10,(2,2))) #正态分布,均值为0,方差为1 print(torch.randn([3,4]))
-
pytroch笔记-tensor
2020-09-10 18:40:22pytorch定义了多种不同精度的浮点、复数、整数张量,比如torch.float32 注意在torch包下面。 还有稀疏张量,目前pytorch提供实验版的支持。 创建 tensor的创建方式: 1、要使用现有数据创建张量,请使用torch.tensor...tensor - 张量
概述:代码里面可以看成一个多维数组。
数学上一个叫多维矩阵,注意不是一个多维向量,自己开始竟然这都搞错了。
向量定义是具有大小和方向的量,也相当于高维空间中的一个点,代码上就相当于一个一维数组。
张量也可以看成高维空间的一个点,不过它形式上是多维矩阵(多维数组)的形式,而不是一维的形式,名字里面的‘’张‘’就是来源于一维边多维,张开了这个原因吧。n维多维矩阵就是
size[0] * size[1] * ... *size[n]
个数有序排列组成的集合。第0维度的元素就是n-1维的多维数组或者多维矩阵.第n-1维对应一个0维的元素,第n-1维对于一个1维的数组。形象化的想象可以是仓库里面的堆货,一个获取代表一个数,先横着放一排,一维,再一排一排的堆上多排,组成了一个个面,二维矩阵数组,然后再把这一个面网上堆,堆成了一个小堆,再一堆一堆的堆满一排的堆,就变成一个4维的数组了,然后在一排一排堆出一个面,仓库的一层,然后堆第二层,以此类推。
构造的时候是低维张量已经逐渐变成的高维的元素。所以index元素的时候要反过去想,
比如现在一个4维的张量x,x第0维度就是一堆货,一个3维张量,x的第4-1=3维度对应就是一货物。注意张量里面的每个元素的类型是一样的。
pytorch定义了多种不同精度的浮点、复数、整数张量,比如torch.float32 注意在torch包下面。
还有稀疏张量,目前pytorch提供实验版的支持。
创建
tensor的创建方式:
1、要使用现有数据创建张量,请使用torch.tensor()。
直接使用python的多维数组或者numpy的多维数组torch.tensor([[1., -1.], [1., -1.]])
tensor([[ 1.0000, -1.0000],
[ 1.0000, -1.0000]])
torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
tensor([[ 1, 2, 3],
[ 4, 5, 6]])
当然也可以使用tensor自身2、要创建具有特定大小的张量,请使用torch.*张量创建操作(请参阅创建操作)。
创建张量:
2.1 直接传入数据创建
torch.tensor(list)
.tensor(ndarry)2.2 设置各种属性进行创建
empty(size)
zeros(size)
new_ones(size)
rand(size) 用0-1之间的均匀分布填充的大小为size的tensor
randn(size) 用标准正态分布填充的大小为size的tensor, 注意这里的n是normal的意思,不是n个的意思
加上_lick , 根据现有的张量创建张量。 这些方法将重用输入张量的属性,例如, dtype,除非设置新的值进行覆盖
如 randn_like(a, )
传入的参数一般有size,dtype=torch.float 等3、更多
要创建与另一张量具有相似类型但大小不同的张量,请使用Tensor.new_*creation ops。
如Tensor.new_full()使用某个值填充 Tensor.new_zero() Tensor.new_one() Tensor.new_empty()4、和numpy相互转换
torch.tensor(a) 直接做参数传入
x = torch.from_numpy(a)
x.numpy() # 没有to, 应该和转入时的from对应更好的需要注意的是使用上面这样直接创建的方式,tensor会直接复制数据,如果不想复制,要采用其它方法,
If you have a Tensor data and just want to change its requires_grad flag, use requires_grad_() or detach() to avoid a copy. If you have a numpy array and want to avoid a copy, use torch.as_tensor().
如果对tensor需要改变requires_grad 标志,直接调用对应方法即可,
对于numpy数组防止拷贝,调用as_tensor方法。可以通过构造器或者tensor的创建操作的地方指定tensor的数据类型,还可以指定使用gup。
torch.ones([2, 4], dtype=torch.float64, device=cuda0)pytorch的tensor内部还有为自动微分提供支持的地方,传入requires_grad=true,表示记录发生在操作tensor上的操作,然后用来支持自动微分。
访问:
张量的内容可以像python的list一样用索引和切片符号来访问和修改。
可用torch.Tensor.item()从张量中获取包含单个值的Python数字。
每个张量都有一个关联的torch.Storage,用于保存其数据。运算
张量的运算通过可以张量对象直接调用,也可以通过torch.xxx()调用
pytorch提供了很多张量之间的运算,如
加减
张量的三角函数值(应该是每个维度下面的三角函数合起来)
最接近的更大的整数张量
变到a-b以内,a-b数不变,两端以外的变成a或b
最大元素,最小元素
所有元素求和之后的对数
等等等等
提供了估计有上百个,也就是说常见的张量的操作这里面都提供了,一般都不用自己造轮子写的。
具体的待以后学习我们对张量进行一些计算操作时,由于张量内存占用是比较大的,有时候需要返回新的张量,有时候直接在原张量上修改,所以pytorch设置了改变原张量值的计算方式和返回新值的计算方法,改变张量的方法用下划线后缀标记。例如,torch.FloatTensor.abs_()就地计算绝对值并返回修改后的张量,而torch.FloatTensor.abs() 在新张量中计算结果。
张量视图:
张量类提供多维数据的截面视图,形式上可以理解为类似于python的切片。
pytorch的张量视图和原来的张量是共享内存的,避免过多内存拷贝。
由上,张量视图可能改变元素之间的连续性,这时候需要注意性能上的一些影响。
张量内部有一个storage属性,存储了基础数据,应该可理解为保存元素的数组,然后有一个stride属性,表示在各个维度上遍历需要跨过的内存长度,比如345的三维数组,stride就是(20,5,1)常见的涉及张量视图的操作如下:
Basic slicing and indexing op, e.g. tensor[0, 2:, 1:7:2] returns a view of base tensor, see note below.
as_strided()
detach()
diagonal()
expand()
expand_as()
narrow()
permute()
select()
squeeze()
transpose()
t()
T
real
imag
view_as_real()
view_as_imag()
unfold()
unsqueeze()
view()
view_as()
unbind()
split()
chunk()
indices() (sparse tensor only)
values() (sparse tensor only)张量的转置,也就是高维空间,多维数组的转置,详见:
https://www.standbyside.com/2019/09/10/understanding-of-transpose-in-numpy/
矩阵转置是高维空间转置的二维情形,x,y交换,对应到多维情形就复杂一些了在二维坐标系下就是x,y交换
numpy数据的transpose(xxx, (2, 0, 1)),也就是现在的第0维度是原来的第二维,第一维是原来的第0维度,。
在3维坐标系下看z变成x,x变成y,y变成了z,更高维的不好想了,按照转化规则在代数上变化。 -
Pytorch生成随机数Tensor的方法汇总
2020-12-17 02:09:36在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: ...sizes (int…) – 整数序列,定义了输出张量的形状 out (Tensor, optinal) – 结果张量 torch.rand(2, 3) [[0.0836 0.6151 0 -
tensorflow相关tensor计算函数
2018-12-08 14:28:101. tf.split 该函数主要用于对tensor进行分割,一般在设置多GPU并行计算时经常会被用到,主要是将一个batch数据... num_or_size_splits: 可以是一个整数,表示分割的后的数量,也可以是一个整数列表,表示分割后每...1. tf.split
该函数主要用于对tensor进行分割,一般在设置多GPU并行计算时经常会被用到,主要是将一个batch数据集进行平分,分配给各个GPU,最后再汇总各个GPU得到的损失,从而加快模型的训练速度,其主要参数的定义如下:
- value:待分割的 `Tensor` .
- num_or_size_splits: 可以是一个整数,表示分割的后的数量,也可以是一个整数列表,表示分割后每一份的size
- axis:分割的维度,默认的第一维
import tensorflow as tf tf.split( value, num_or_size_splits, axis=0, num=None, name="split" )
2. tf.add_n
该函数主要是对输入的tensor列表中每一个tensor进行加总,要求每个tensor的维度必须相同,当开启并行计算时,该函数也经常被用来计算各个GPU得到的损失,其主要参数定义如下:
- inputs:一个tensor列表
import tensorflow as tf tf.add_n(inputs, name=None)
-
解读Tensor张量的维数
2019-10-04 21:55:02张量的形状以 [D0, D1, … Dn-1] 的形式表示,D0到Dn是任意的正整数。 如形状[3,4]表示第一维有3个元素,第二维有4个元素,[3,4]表示一个3行4列的矩阵。 在形状的中括号中有多少个数字,就代表... -
pytorch——tensor数据结构与存储结构
2020-09-20 21:44:42pytorch9 tensor数据结构与存储结构tensor数据结构与存储结构pytorch数据结构默认整数与浮点数dtype修改变量类型变量类型有哪些数据类型转换torch vs numpy两者转换两者区别张量张量修改尺寸张量内存存储结构存储区... -
PyTorch tensor相关函数及属性汇总
2020-12-14 20:59:24返回tensor的维度(整数)。 import torch a = torch.zeros([3]) b = torch.zeros([1,2,3]) print(a,'\n',b) a_dim = a.ndimension() b_dim = b.ndimension() print(a_dim,'\n',b_dim) ###返回值 tensor([0., 0... -
Tensor:逐元素操作
2021-01-06 09:40:39这部分操作会对tensor的每一个元素(point-wise,又名element-wise)进行操作,此类操作的输入与输出形状一致。常用的操作如表3-4所示。 表3-4: 常见的逐元素操作 函数 功能 abs/sqrt/div/exp/fmod/log/pow.. ... -
Kroneker Tensor:克罗内克张量
2020-12-01 09:43:58Kroneker Tensor,克罗内克张量 Kroneker张量源自Kronecker delta函数。Kronecker delta,即克罗内克函数(又称克罗内克δ函数、克罗内克δ、克罗内克符号)δij是一个二元函数,得名于德国数学家利奥波德·... -
关于tensor中数值类型
2020-08-23 09:41:10X = torch.tensor([[1,2],[3,4]]) #查看X的类型 print(type(X)) #查看数据值的类型 print(X.dtype) #X的数据类型为torch.int64,因为输入的数据全为整数 Y1 = torch.ones(2,2) Y2 = torch.zeros(2,2) Y3 = torch.... -
[Pytorch]tensor属性的学习笔记
2021-03-04 16:55:21@Pytorch tensor创建与属性的学习笔记 代码写着写着,发现要学习一下基础的知识。这里只举最简单的例子,以便说明各属性的功能。 一、tensor的创建 ...dtype:输入数据若是整数,dtype默认为torch.int64;输入小数 -
AI入门----tensor的基本运算
2020-12-17 16:00:22值得注意的是,开根号运算等操作时,tensor中的元素一定要是float类型才行,不能是整数。 当然,也可以对tensor数据进行一些自身的运算:向上(下)取整、取小数、四舍五入等。 tensor与tensor的运算涉及矩阵运算。... -
代码库:Pytorch_tensor
2021-03-11 17:14:15Table of Contents 1 创建张量1.1 常用方法1.2 基于概率创建张量2 ...tensor 内数值尽量采用float类型,整数类型会出现许多报错 import torch as th 创建张量 常用 -
pytorch----扩展/压缩tensor维度
2020-09-09 10:57:231. 扩展Tensor维度 当输入的数据维度和实验需要维度不一致,... 参数说明:self:输入的tensor数据,dim:要对哪个维度扩展就输入那个维度的整数,可以输入0,1,2…… 1.2Code 第一种方式,输入数据后直接加un... -
pytorch每日一学24(torch.quantize_per_tensor()、torch.quantize_per_channel())使用映射过程将tensor进行...
2020-11-21 16:45:52第24个方法 torch.quantize_per_tensor(input, scale, zero_point, dtype) → Tensor torch.quantize_per_channel(input, scales, zero_points, axis, dtype) → Tensor ...量化模型对张量使用整数而不是浮点值 -
pytorch 生成全零tensor 指定type_小白学PyTorch | 9 tensor数据结构与存储结构
2020-11-22 13:22:00参考目录:1 pytorch数据结构1.1 默认整数与浮点数1.2 dtype修改变量类型1.3 变量类型有哪些1.4 数据类型转换2 torch vs numpy2.1 两者转换2.2 两者区别3 张量3.1 张量修改尺寸3.2 张量内存存储结构3.3 存储区3.4 头... -
pytorch自学笔记2:关于tensor的shape初步理解
2021-02-14 17:28:03首先,对于整数来说,如果要写一个大小为[4,3,2]的3Dtensor,那么首先tensor需要一个括号,并在里面再写4个括号 torch = torch.tensor([ [ ], [ ], [ ], []]) 再在四个括号里面,分别加上三个括号 torch = ... -
tensor torch 构造_FlyAI小课堂:小白学PyTorch(10) tensor 数据结构与存储结构
2020-12-21 16:20:43Fly-AI竞赛服务平台 flyai.com在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己...目录1 pytorch数据结构1.1 默认整数与浮点数1.2 dtype修改变量类型1.3 变量类型有哪些1.4 数据类... -
TensorFlow笔记——tf.split()拆分tensor和tf.squeeze()
2018-07-24 21:21:00tf.split() 参数说明: split( value, num_or_size_splits, axis=0, num=None, ...num_or_size_splits: 如果是个整数n,就将输入的tensor分为n个子tensor。如果是个tensor T,就将输入的tenso... -
pytorch使用empty跟内建函数random_进行初始化Tensor
2020-11-02 20:29:37使用empty跟内建函数random_进行初始化...其中如果函数有下标“_”这个表示时Tensor里的内建函数,其中产生一个0到2-1的整数值来随机初始化y https://blog.csdn.net/yangdashi888/article/details/85781496 ... -
PyTorch深度学习(二):1. tensor与数据生成
2020-02-05 19:55:18生成数据2.1 开始2.2 定义各类数据(矩阵):2.2.1 生成全为1的矩阵:2.2.2 生成全为0的矩阵:2.2.3 生成0-1之间的随机数矩阵:2.2.4 生成整数类型的随机数矩阵:2.2.5 生成符合正态分布的随机数矩阵... -
tf.gather_nd详解
2018-12-30 20:41:20官网链接 ...tf.gather_nd( params, indices, name=None ) 按照indices的格式从params中抽取切片(合并为一个Tensor) indices是一个K维整数Tensor, 例子1 import tensorflow... -
TensorFlow2.0中Tensor的维度变换
2020-01-04 03:07:25在张量的操作中,维度变换是最重要的操作之一,为了满足不同场景的运算需求,可以任意切换数据的形式。现列举一些常用方法,以方便查看。 张量变形 ... x = tf.range(24) # 生成一组连续整数向量 &g... -
tensorflow API——tf.random_uniform 使用
2019-05-22 16:45:11文章目录定义参数示例 定义 tf.random.uniform( shape, minval=0, maxval=None, dtype=tf.dtypes.float32, ...shape: 1-D整数Tensor或Python数组, 输出张量的形状。 minval: 类型的0-D Tensor或... -
Tensorflow相关命令
2018-09-12 10:23:121.tf.split tf.split(value,num_or_size_splits,axis=0,num=None,name=’split’) ... num_or_size_splits:指示沿 split_dim 分割数量的 0-D 整数 Tensor 或包含沿 split_dim 每个输出张量大小的 1-D 整数 Ten... -
神经网络的数据表示 -- 张量(Tensor)
2019-11-18 16:37:25张量(tensor)是一个数据容器,它所包含的一般是数值数据。下面是张量中的一些名词: 轴(axis):张量的维度( dimension);张量轴的个数也称作阶. 形状(shaple):这是一个整数元组,表示张量沿每个轴的维度... -
tf建立tensor_tensorflow随机张量创建
2021-01-14 11:23:40TensorFlow 有几个操作用来创建不同分布的随机张量。注意随机操作是有状态的,并在每次评估时...random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)args:shape:一维整数或 Python ... -
pytorch每日一学40(torch.split())将张量拆分为块(tensor的分割)
2020-12-08 15:17:34第40个方法 torch.split(tensor, split_size_or_sections, dim=0) ...split_size_or_sections:当此参数为整数时,意思是将tensor按照每块大小为split_size_or_sections来切割,当此参数为列表时,将此tensor切成