赞
踩
在学习深度学习的过程中,遇到的第一个概念就是张量,张量在pytorch中的计算十分重要,所以本篇博客记录本人学习张量的过程,以及自己的理解。
张量是一个多维数组,它是标量、向量、矩阵的高维扩展
我们通常用三维张量去表示一张图像的数据
张量在pytorch中是做求导计算的关键概念
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导
Pytorch0.4.0版开始,Variable并入Tensor
torch.tensor()
功能:从data创建tensor
import torch
import numpy as np
a_np = np.ones((3,3))
tensor = torch.Tensor(
a_np,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False,
)
print(tensor)
输出:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动
import torch
import numpy as np
a_np = np.array([[1,2,3,4],[1,2,3,4]])
# 创建张量
# print(torch.Tensor(a_np))
# 从numpy数据类型创建
a_tensor = torch.from_numpy(a_np)
print(a_tensor)
输出:
tensor([[1, 2, 3, 4],
[1, 2, 3, 4]], dtype=torch.int32)
如果更改numpy数组中的数据,tensor中的数据也会被改变,说明这两个数据是共享内存的。
a_np[0][0] = 2
print(a_tensor)
输出:
tensor([[2, 2, 3, 4],
[1, 2, 3, 4]], dtype=torch.int32)
torch,zeros()
功能:依size创建全0张量
import torch
a_tensor = torch.zeros((3,3),out=None,layout=torch.strided,device=None)
print(a_tensor)
输出:
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
torch.zeros_like()
功能:依input形状创建全0张量
a_tensor = torch.zeros((3,3),out=None,layout=torch.strided,device=None)
# print(a_tensor)
b_tensor = torch.zeros_like(
a_tensor,
dtype=None,
layout=None,
device=None
)
print(b_tensor)
输出:
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
torch.ones()
torch.ones_like()
全1张量的创建,创建方式与全0张量一样,就不过多赘述。
torch.full()
torch.full_like()
功能:依input形状创建全自定义数值的张量
a_tensor = torch.full((3,3),3)
b_tensor = torch.full_like(a_tensor,4)
print(a_tensor)
print(b_tensor)
输出:
tensor([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
tensor([[4, 4, 4],
[4, 4, 4],
[4, 4, 4]])
torch.arange()
功能:创建等差的1维向量
a_tensor = torch.arange(0,10,step=2)
print(a_tensor)
tensor([0, 2, 4, 6, 8])
注意:end的值不取
torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间维[start,end] end是取的
a_tensor = torch.linspace(1,100,20)
print(a_tensor)
输出:
tensor([ 1.0000, 6.2105, 11.4211, 16.6316, 21.8421, 27.0526, 32.2632,
37.4737, 42.6842, 47.8947, 53.1053, 58.3158, 63.5263, 68.7368,
73.9474, 79.1579, 84.3684, 89.5789, 94.7895, 100.0000])
torch.logspace()
创建对数均分的1维张量
torch.eye()
功能:创建单位对角矩阵(2维张量)
torch.normal()
生成正态分布(高斯分布)
gaosi = torch.normal(0.5,0.25,size=(4,))
print(gaosi)
输出:
tensor([0.2068, 0.5469, 0.4644, 0.6587])
torch.randn()
torch.randn_like()
生成标准正态分布
torch.rand()
torch.rand_like()
在[0,1)区间上,生成均匀分布
torch.randint()
torch.randint_like()
区间[low,high)上生成整数均匀分布
pytorh中常见的几种创建方法就是这些了,以后如果遇到新的创建方法我也会在博客中进行分享,下篇博客中,我将学习,张量的一些变换以及计算。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。