Pytorch中的Tensor常用操作有哪些
这篇文章主要为大家展示了"Pytorch中的Tensor常用操作有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Pytorch中的Tensor常用操作有哪些"这篇文章吧。
1、创建Tensor
import torch#经典方式device = torch.device("cuda:0")x = torch.tensor([1,2],dtype = torch.float32,device = device,requires_grad=True)w = sum(2 * x)w.backward()print(x.device)print(x.dtype)print(x.grad)#Tensory = torch.Tensor([1,2,3])#等价于y = torch.FloatTensor([1,2,3])#32位浮点型#后者声明打开梯度y.requires_grad = True#还有其他类型,常用的torch.LongTensor(2,3)torch.shortTensor(2,3)torch.IntTensor(2,3)w = sum(2 * y)w.backward()print(y.grad)print(y.dtype)
输出:
cuda:0
torch.float32
tensor([2., 2.], device='cuda:0')
tensor([2., 2., 2.])
torch.float32
和numpy类似的创建方法
x = torch.linspace(1,10,10,dtype = torch.float32,requires_grad = True)y = torch.ones(10)z = torch.zeros((2,4))w = torch.randn((2,3))#从标准正态分布(均值为0,方差为1)上随机采用,高斯噪声点,而rand相当于在0,1间随机采样#torch.normal()????print(x)print(y)print(z)print(w)
输出
tensor([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.], requires_grad=True)
tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
tensor([[-0.6505, 1.3897, 2.2265],
[-1.7815, -1.8194, -0.4143]])
从numpy转换
np_data = np.arange(2,13,2).reshape((2,3))torch_data = torch.from_numpy(np_data)#numpy转tensorprint('numpy',np_data)print('torch',torch_data)
输出
numpy [[ 2 4 6]
[ 8 10 12]]torch tensor([[ 2, 4, 6],
[ 8, 10, 12]], dtype=torch.int32)
2、组合
import torchx = torch.arange(0,10,1).reshape(2,-1)#size=(2,5)y = torch.ones(10).reshape(2,-1)#size=(2,5)print(x)print(y)w = torch.cat((x,y),dim = 0)#默认从size最左边开始,这里结果为:(2+2,5)z = torch.cat((x,y),dim = 1)#(2,5+5)print(w,w.size())print(z,z.size())#还有种stack()
输出:
tensor([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
tensor([[0., 1., 2., 3., 4.],
[5., 6., 7., 8., 9.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]) torch.Size([4, 5])
tensor([[0., 1., 2., 3., 4., 1., 1., 1., 1., 1.],
[5., 6., 7., 8., 9., 1., 1., 1., 1., 1.]]) torch.Size([2, 10])
3、数据类型转换
法一
x = torch.rand((2,2),dtype = torch.float32)print(x.dtype)x = x.double()print(x.dtype)x = x.int()print(x)
输出:
torch.float32
torch.float64
tensor([[0, 0],
[0, 0]], dtype=torch.int32)
法二
x = torch.LongTensor((2,2))print(x.dtype)x = x.type(torch.float32)print(x.dtype)
输出:
torch.int64
torch.float32
4、矩阵计算
x = torch.arange(0,4,1).reshape(2,-1)print(x)print(x * x )#直接相乘print(torch.mm(x,x))#矩阵乘法print(x + 1)#广播print(x.numpy())#转换成numpy
输出:
tensor([[0, 1],
[2, 3]])
tensor([[0, 1],
[4, 9]])
tensor([[ 2, 3],
[ 6, 11]])
tensor([[1, 2],
[3, 4]])
[[0 1]
[2 3]]
5、维度变化
主要是对维度大小为1的升降维操作。
torch.squeeze(input)#去掉维度为1的维数 torch.unsqueeze(input,dim)#指定位置增加一维
以上是"Pytorch中的Tensor常用操作有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!