两分钟从代码了解Tensor张量
1.张量
神经网络中的张量可以看成一个多维数组。与numpy的ndarray相似。tensor在GPU上进行运算而ndarray在CPU上。
下面以张量就是多维数组这一前提,进行张量数据结构属性一 一验证。
1.1 tensor数据类型
张量的数据类型和numpy.array基本一一对应,但是不支持str类型。
包括:
torch.float64(torch.double),
torch.float32(torch.float),
torch.float16,
torch.int64(torch.long),
torch.int32(torch.int),
torch.int16,
torch.int8,
torch.uint8,
torch.bool
一般神经网络建模使用的都是torch.float32类型。
输入:
# 指定数据类型
i = torch.tensor(1,dtype = torch.int32);print(i,i.dtype)
x = torch.tensor(2.0,dtype = torch.double);print(x,x.dtype)
输出:
tensor(1) torch.int64
tensor(2.) torch.float32
tensor(True) torch.bool
1.2 tensor维度
不同类型的数据可以用不同维度(dimension)的张量来表示。
标量为0维张量,向量为1维张量,矩阵为2维张量。
彩色图像有rgb三个通道,可以表示为3维张量。
视频还有时间维,可以表示为4维张量。
可以简单地总结为:有几层中括号,就是多少维的张量。
输入:
tensor4 = torch.tensor([[[[1.0,1.0],[2.0,2.0]],[[3.0,3.0],[4.0,4.0]]],
[[[5.0,5.0],[6.0,6.0]],[[7.0,7.0],[8.0,8.0]]]]) # 4维张量
print(tensor4)
print(tensor4.dim())
输出:
tensor([[[[1., 1.],
[2., 2.]],
[[3., 3.],
[4., 4.]]],
[[[5., 5.],
[6., 6.]],
[[7., 7.],
[8., 8.]]]])
4
一维是一个数列,二维是矩阵,我个人感觉从3维开始就没什么…直观的感觉了。
1.3tensor的尺寸
可以使用 shape属性或者 size()方法查看张量在每一维的长度.
可以使用view方法改变张量的尺寸。
如果view方法改变尺寸失败,可以使用reshape方法.
直接用reshape改变向量维度。
输入:
vector = torch.tensor([1.0,2.0,3.0,4.0])
print(vector.size())
print(vector.shape)
matrix = torch.tensor([[1.0,2.0],[3.0,4.0]]) #2行2列
print(matrix)
test = matrix.reshape(1, 4) #1行4列
print(test)
输出:
torch.Size([4])
torch.Size([4])
tensor([[1., 2.],
[3., 4.]])
tensor([[1., 2., 3., 4.]])
1.4 tensor的其他技巧
输入:
# item方法和tolist方法可以将张量转换成Python数值和数值列表
scalar = torch.tensor(1.0)
s = scalar.item()
print(s)
print(type(s))
tensor = torch.rand(2,2)
t = tensor.tolist()
print(t)
print(type(t))
输出:
1.0
<class 'float'>
[[0.2582204341888428, 0.4571046829223633], [0.7230430841445923, 0.7788170576095581]]
<class 'list'>
总结
张量就是一个多维数组的数据结构,可以对其进行各种操作。