Pytorch简介和张量Tensor

Pytorch简介

PyTorch是一个Python包,提供两个高级功能:

  • 具有强大的GPU加速的张量计算(如NumPy)
  • 包含自动求导系统的的深度神经网络
    服务于以下两种场景:
  • 作为NumPy的替代品,可以使用GPU的强大计算能力
  • 提供最大的灵活性和高速的深度学习研究平台

张量Tensor

各种数值数据统称为张量

  • 常量:scaler:0阶张量
  • 向量:vector:1阶张量
  • 矩阵:matrix:2阶张量

一、使用:

  • 使用python列表或者序列创建tensor(是浮点型)
torch.tensor([1,2,3])
  • numpy生成再转换为tensor
torch.tensor(np.array([[1,2,3],[4,5,6]]))
  • 使用torch的api创建tensor
    1、torch.empty(3,4)创建3行4列的的为空的tensor,会用无用数据进行填充

    2、toch.ones([3,4])创建3行4列的全为1的tensor。
    torch.ones_like(input)相当于 torch.ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device),类似于复制了一个和input类型一样但是里面的数据全为1

    3、torch.zeros([3,4])创建3行4列的全为0的tensor

    4、torch.rand([3,4])创建3行4列的随机值的tensor,随机值区间是[0,1)
    (可以等于0,但不能等于1)

    5、torch.randint(low=0,high=10,size=[3,4])创建3行4列的随机整数的tensor,随机值的区间是[low,high)

二、tensor常用方法:

  • 获取tensor中的数据(当tensor中只有一个元素可用):tensor.item()(当有两个元素就不可以)
t1 = torch.Tensor([[[1]]])
t1
output : tensor([[[1.]]])
t1.item()
1.0
  • 转化为numpy数组z.numpy()
    注: tensor和numpy的转换注意一些情况是会共享内存地址的,详解请看我的转载博客:tensor和numpy之间的转换

  • 获取形状 tensor.size()
    使用tensor.shape也可,但是size()可获取具体某一个维度的形状

t = torch.Tensor([[[1,2]]])
t.size()
output:torch.Size([1, 1, 2])

t.size(-1) ##-1表示最后一个维度的大小
output:2
t.size(0)
output:1
t.size(1)
output:1
  • 改变形状```tensor.view(3,4)。类似numpy中的reshape,是一种浅拷贝,仅仅是形状发生改变,并且数据本身并没有发生任何变化
    Pytorch简介和张量Tensor_第1张图片

  • 获取阶数:tensor.dim()(上面的t因为是三维,所以输出为3)

  • 获取最大值、最小值:tensor.max()
    tensor.min()

  • 转置:
    tensor.t()(二维)
    tensor.transpose(0,1)表示交换一维和二维的大小(适用于__二维、高维__)
    tensor.permute(1,0,2)表示交换一维和二维的大小(与transpose相比,需要多输入一个数,适用于__高维__)
    补充:view()和permute()的区别
    https://zhuanlan.zhihu.com/p/88311093

  • 取值和赋值
    tensor[1,3]表示获取第一行第三列的值
    tensor[1,3]=100表示第一行第三列的位置进行赋值100

  • tensor的切片
    tensor[:,:,1]表示取三维中所有第二列的数据

三、tensor数据类型

  • 获取tensor数据类型:tensor.dtype

  • 创建数据的时候指定类型:torch.ones([2,3],dtype=torch.float32)

  • torch.Tensor和torch.tensor的区别
    i. 全局(默认的数据类型)是torch.float32
    ii. torch.Tensor()传入数字(例如torch.Tensor(3,4)则表示三行四列的矩阵)表示形状,和torch.FloatTensor相同;
    torch.Tensor传入的是列表表示数据(例如torch.Tensor([3,4])则表示一行两列的数据)
    iii. torch.tensor为创建tensor的方法

四、tensor的其他操作

  • 相加
    i. x+y 或 x+10
    ii. torch.add(x,y)
    iii. x.add(y)
    iv. ```x.add_(y)``#带下划线的方法会对x进行就地修改,x发生改变

  • GPU中的tensor的使用```torch.cuda``
    通过.to方法能够把一个tensor转移到另外一个设备(比如从CPU转到GPU)

#device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.is_available():
	device = torch.device("cuda") ##cuda device对象
	y = torch.ones_like(x, device=device) ##创建一个在cuda上的tensor
	x = x.to(device) ##使用方法把x转为cuda 的tensor
	z = x + y
	print(z)
	print(z.to("cpu", torch.double))## .to方法能够同时设置类型

你可能感兴趣的:(pytorch)