最近对pytorch进行了初步学习,本博客用于整理巩固学习成果,在此分享,希望与众佬共同进步。
pytorch中对tensor的基本操作主要分为,生成tensor、初始化tensor、从np导入tensor以及索引tensor。
1.生成tensor
tensor作为众多深度学习框架的基本数据类型,也是pytorch的基本数据结构。在pytorch中生成tensor可以直接使用torch.tensor结构,如下各例所示:
- a=torch.rand(2,3) #生成维度为(2,3)的tensor,服从(0,1)均匀分布
输出结果:
a= tensor([[0.5614, 0.9591, 0.8236],
[0.6383, 0.5176, 0.4473]])
- b=torch.randn(2,3) #生成维度为(2,3)的tensor,服从(0,1)正态分布
输出结果:
b= tensor([[-1.6925, 0.0550, -0.2395],
[ 0.0332, 0.9193, 0.8795]])
- c=torch.FloatTensor(2,3) #生成float类型的tensor,维度为(2,3)
输出结果:
c= tensor([[1.0148e-38, 7.9454e-43, 0.0000e+00],
[0.0000e+00, 1.8367e-40, 0.0000e+00]], dtype=torch.float32)
- d=torch.FloatTensor([2,3]) #生成float类型的tensor,tensor值为[2,3]
输出结果:
d= tensor([2., 3.], dtype=torch.float32)
2.初始化tensor
1.torch.set_default_tensor_type
- 设置初始化数据类型 torch.set_default_tensor_type(torch.DoubleTensor)
2.torch.full
- torch.full([],7) #生成标量7
- torch.full([2,3],7) #生成维度为[2,3]的张量,数据全为7
输出结果:
tensor(1.)
tensor([[7., 7., 7.],
[7., 7., 7.]])
3.torch.randperm
- torch.randperm(4) #生成随机的0~3索引
- random.shuffle([list]) #将list随机生成索引
输出结果:
tensor([2, 3, 1, 0])
[3, 2, 4, 1]
4.torch.arange和torch.linspace
- torch.arange(0,10,2)) #[0,10) 不包含10 [start,end)
输出结果:
tensor([0, 2, 4, 6, 8])
- torch.linespace(0,10,4) #[0,10],分成4份,[start,end]
输出结果:
tensor([ 0.0000, 3.3333, 6.6667, 10.0000])
5.torch.ones 、torch.eye、torch.zeros
- torch.ones(3,3) #生成全1,维度为[3,3]的张量
输出结果:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
- torch.zeros(3,4) #生成全0,维度为[3,4]的张量
输出结果:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
- torch.eye(3,4) #生成对角矩阵,维度为[3,4]的张量
输出结果:
tensor([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])
6.torch.ones_like
- a=torch.rand(2,3)
- torch.ones_like(a) #生成一个与a维度相同的全1张量
输出结果:
tensor([[1., 1., 1.],
[1., 1., 1.]])
3.从np导入tensor
- a=np.array([3,4])
- torch.from_numpy(a) #从numpy生成tensor
输出结果:
tensor([2, 3], dtype=torch.int32
4.索引tensor
- s=torch.rand(3,3,25,25)
- s[:,1:3,:2,:] # 1: 从1索引到最后;:3从开始索引到3,不包含3 ;1:3,索引1,2;:索引所有
输出结果:
torch.Size([3, 2, 2, 25])
- s.torch.index_select(0,torch.tensor([0,2])) #第一个参数为维度,第二个为在该维度上的索引值
输出结果:
torch.Size([2,3,25,25])
- s.take(torch.tensor([0,2,3])) #将数据打平后按索引进行取值
输出结果:
tensor([0.2804, 0.7501, 0.3356])
- m=torch.rand(3,4)
- mask=m.ge(0.5)
- torch.mask.select(m,mask) #根据mask的指示将符合条件的值选出来
输出结果:tensor([0.8176, 0.9806, 0.9891, 0.5170, 0.8640, 0.7677, 0.5879])
你太大了,我不练了