赞
踩
其他相关操作:https://blog.csdn.net/qq_43923588/article/details/108007534
本篇对tensor的一些常用操作进行展示,包含:
使用方法和含义均在代码的批注中给出,因为有较多的输出,所以设置输出内容的第一个值为当前print()方法所在的行
import torch import numpy as np import sys loc = sys._getframe() '''用numpy生成数据,之后导入torch使用GPU进行加速运算''' a = np.array([2, 3.3]) aa = torch.from_numpy(a) a1 = np.array([2, 3]) aa1 = torch.from_numpy(a1) # 这里导入以后会保持原来的数据类型 print(loc.f_lineno, '\n', aa, '\n', aa1) '''list中数据导入torch使用GPU进行加速运算''' b = [1, 2, 3] bb = torch.tensor(b) print(loc.f_lineno, '\n', bb) '''此处区别一下torch.tensor(b)和torch.Tensor(b) Tensor与FloatTensor类似,接收维度作为参数(shape)生成一个对应维度的张量,同时也可以用接收现有数据 tensor()用于接收已经生成的现有数据''' c = torch.Tensor(2, 3, 2) cc = torch.Tensor([2, 3]) print(loc.f_lineno, '\n', c, '\n', cc) '''申请一个未初始化的空间''' # 一般在使用后要立马进行赋值 d = torch.empty([2, 3]) dd = torch.FloatTensor(2, 3) # dd = torch.IntTensor(2, 3) print(loc.f_lineno, '\n', d, '\n', dd) # 在输出中可以看到,未经初始化的tensor的数值有的非常大,有的非常小,不利于进行运算,并可能报错 # 未初始化的tensor一般只作为一个容器,进行赋值以后才会由于运算 '''默认的tensor的类型转换 在进行初始化tensor时,系统会自动将生产的tensor转换为默认数据类型,一般为float 在增强学习中,使用的默认数据类型为double 所以有时候需要改变tensor的默认数据类型''' e = torch.tensor([3, 2.2]) print(loc.f_lineno, '\n', e.type()) torch.set_default_tensor_type('torch.DoubleTensor') ee = torch.tensor([3, 2.2]) print(loc.f_lineno, '\n', ee.type()) '''随机初始化的tensor''' # 使用rand()函数进行(0:1)随机分布初始化 f = torch.rand(3, 3) # like()函数进行对tensor的shape的复制 ff = torch.rand_like(f) print(loc.f_lineno, '\n', f, '\n', ff) # randint()函数,支持指定初始化值的范围(可以取左边界,不能取右边界) # 第一个参数为最小值,第二个参数为最大值,第三个参数为shape g = torch.randint(1, 10, [3, 3]) print(loc.f_lineno, '\n', g) '''正态分布初始化''' h = torch.randn(3, 3) # 自定义正态分布的均值和方差,mean取均值(上传一个10维全0向量取均值),std为方差,也是不包含右边界 hh = torch.normal(mean=torch.full([10], 0.), std=torch.arange(1, 0, -0.1)) # 这里对均值方差进行输出 print(loc.f_lineno, '\n', torch.full([10], 0.), '\n', torch.arange(1, 0, -0.1), '\n', h, '\n', hh) '''将tensor完全赋值为某一个元素''' # 需要注意:如果报错的话,这里的数据类型需要设置为float 我也不知道为什么报错,不是因为改了默认类型 i = torch.full([2, 3], 5.) ii = torch.full([], 5.) # 因为上面吧默认类型改为了double,所以这里输出double print(loc.f_lineno, '\n', i, '\n', ii, '\n', i.type()) '''torch生成等差数列''' # 生成等差数列,默认公差为1 j = torch.arange(0, 10) # 生成公差为2的等差数列 jj = torch.arange(0, 10, 2) # 与range()相比,可以包含右边界值,并且会输出警告信息,一般不使用,会使用arange()函数代替 jjj = torch.range(0, 10) print(loc.f_lineno, '\n', j, '\n', j, '\n', jjj) '''torch生成等分的数列''' # 值得注意的是,这里会包含右边界 k = torch.linspace(0, 10, steps=4) kk = torch.linspace(0, -2, steps=10) print(loc.f_lineno, '\n', k, '\n', kk) '''生成全0,全1的tensor,以及生成对角矩阵''' l = torch.zeros(3, 3) ll = torch.ones(3, 3) lll = torch.eye(3, 3) # 同样ones和zeros也有_like()方法可以使用 print(loc.f_lineno, '\n', l, '\n', ll, '\n', lll) '''随机打散函数randperm()''' # 不包含右边界 m = torch.randperm(10) print(loc.f_lineno, '\n', m) # 一般用于索引操作,可以保证相应位置对其 m1 = torch.rand(2, 3) m2 = torch.rand(2, 3) idx = torch.randperm(2) print(loc.f_lineno, '\n', m1, '\n', m2, '\n', m1[idx], '\n', m2[idx])
13 tensor([2.0000, 3.3000], dtype=torch.float64) tensor([2, 3], dtype=torch.int32) 19 tensor([1, 2, 3]) 27 tensor([[[0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.]]]) tensor([2., 3.]) 35 tensor([[0.0000e+00, 0.0000e+00, 2.8026e-45], [0.0000e+00, 1.4013e-45, 0.0000e+00]]) tensor([[0., 0., 0.], [0., 0., 0.]]) 45 torch.FloatTensor 48 torch.DoubleTensor 56 tensor([[0.0498, 0.7839, 0.3798], [0.5728, 0.9653, 0.3778], [0.9931, 0.9079, 0.1136]]) tensor([[0.8657, 0.7780, 0.9812], [0.4690, 0.0896, 0.6510], [0.2210, 0.0278, 0.5827]]) 61 tensor([[3, 3, 9], [6, 8, 6], [6, 2, 5]]) 69 tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) tensor([1.0000, 0.9000, 0.8000, 0.7000, 0.6000, 0.5000, 0.4000, 0.3000, 0.2000, 0.1000]) tensor([[-1.8840, -1.4429, 0.3300], [-1.1386, 0.4550, 0.5290], [-0.6208, 0.5545, -0.3362]]) tensor([ 0.1460, 2.2914, 0.4966, 0.3761, 0.1462, -0.0325, -0.0465, 0.1316, -0.1955, 0.0358]) 77 tensor([[5., 5., 5.], [5., 5., 5.]]) tensor(5.) torch.DoubleTensor 87 tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) tensor([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) 94 tensor([ 0.0000, 3.3333, 6.6667, 10.0000]) tensor([ 0.0000, -0.2222, -0.4444, -0.6667, -0.8889, -1.1111, -1.3333, -1.5556, -1.7778, -2.0000]) 102 tensor([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]) tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) tensor([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) 108 tensor([4, 7, 2, 8, 0, 3, 5, 1, 9, 6]) 113 tensor([[0.8608, 0.4485, 0.5131], [0.8717, 0.8186, 0.1990]]) tensor([[0.5564, 0.1326, 0.6467], [0.2383, 0.8949, 0.5849]]) tensor([[0.8608, 0.4485, 0.5131], [0.8717, 0.8186, 0.1990]]) tensor([[0.5564, 0.1326, 0.6467], [0.2383, 0.8949, 0.5849]]) 86: UserWarning: torch.range is deprecated in favor of torch.arange and will be removed in 0.5. Note that arange generates values in [start; end), not [start; end]. jjj = torch.range(0, 10) Process finished with exit code 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。