文章结构
一、什么是张量?张量的基本介绍。
二、pytorch中几种创建张量的方式。
1.直接创建、
2.依据数值创建、
3.依据概率创建。
三、张量的基本操作。
1.张量的拼接、
2.张量的切分、
3.张量的索引、
4.张量的变换、
5.张量的数学运算。
一、什么是tensor?
tensor(张量)是深度学习框架中常用的数据形式,虽然在生活中并不常见,但并不难理解,在数学概念中张量就是一个多维数组,是标量、向量、矩阵的高维扩展。如下图:
当张量维度为0时,在含义上对应于标量;当张量维度为1时,在含义上对应于向量;当张量维度为2时,在含义上对应于矩阵。如果在维度上继续拓展,这样的数学表现形式我们统称为标量。例如彩色图像就是一个三维张量(例如3*256*832),在维度上分别表示为色彩(RGB)、图像的高和图像的宽。
在深度学习框架中,张量除了存储数据外,还被赋予了其他的属性,正是因为拥有这些属性,使得张量可以实现自动求导的功能(张量在数据的基础上进行抽象,成为一个数据类)。在Pytorch中张量常用的属性有以下几种:
其中:
data:存储的数据即n维数组;
dtype:data存储数据的数据类型(int、float等等);
shape:data的数据大小(例如3*256*832);
device:tensor存储在哪个设备上(cuda or cpu);
requires_grad: 布尔类型,表示该tensor是否需要计算梯度(True or False);
grad:data的梯度;
grad_fn: 创建tensor时所用到的function(例如加法或者乘法等),是自动求导的关键;
is_lead: 该tensor是否为计算图中的叶子节点。
二、pytorch中创建张量的几种方法:
1.直接创建:
① torch.tensor( data, dtype=None, device=None, requires_grad=False, pin_memory=False)
其中data就是张量中存储的数据,可以是list,numpy;dtype数据类型默认和data一致;device所在设备(cuda or cpu);requires_grad是否需要计算梯度;pin__memory是否存于锁页内存。代码实现如下:
import torch
import numpy as np
# 创建numpy数据
arry = np.ones((3,3))
print("array的数据类型:",arry.dtype)
# 创建tensor
t = torch.tensor(arry)
print(t)
② torch.from_numpy(ndarray)
其中ndarray即为numpy数据,需要注意的一点是通过此种方法创建,tensor和ndarray是共享内存的,当修改一个数据时另一个数据也会随之改变。代码实现如下:
import torch
import numpy as np
# 创建numpy数据
arry = np.array([[1,2,3],[4,5,6]])
print("numpy:",arry)
# 创建tensor
t = torch.from_numpy(arry)
print("tensor:",t)
# 测试共享内存
arry[0][0] = 10
print("numpy:",arry)
print("tensor:",t)
2.依据数值创建:
① torch.zeros(size, out=None, dtype=None, layout=torch.strided,