代码创作世界——pytorch深度学习框架数据类型

代码创作世界——pytorch深度学习框架数据类型

torch中的数据类型张量(tensor)

pytorch中的

在数学中,一个单独的数可以成为标量,一行或者一列数组可以称为向量,一个二维数组称为一个矩阵,矩阵中的每一个元素可以被行和列所唯一确定,如果数组的维度超过2那么我们称该数组为张量Tensor。

但在pytorch中张量属于一种数据结构,它可以是一个标量、数组、向量、矩阵、甚至更高维的数组,它和numpy中的ndarray非常相似,在使用的过程中经常转换

数据类型 dtype cpu tensor GPU tensor
32位浮点型 torch.float32或torch.float torch.FloatTensor torch.cuda.FloatTensor
64位浮点型 torch.float64或torch.double torch.DoubleTensor torch.cuda.DoubleTensor
16位浮点型 torch.float16或torch.half torch.HalfTensor torch.cuda.HalfTensor
8位无符号整型 torch.unit8 torch.ByteTensor torch.cuda.ByteTensor
8位有符号整型 torch.int8 torch.CharTensor torch.cuda.CharTensor

torch中默认使用的数据类型是32位浮点数

张量的数据类型

在程序中使用torch.tensor()生成一个张量然后通过.dtype方法获取张量的数据类型,结果位32位浮点数。

import torch
torch.tensor([1.2,3.4]).dtype

在这里插入图片描述

使用set_default_tensor_type来设置默认的数据类型

torch.set_default_tensor_type(torch.DoubleTensor)
torch.tensor([1.2,3.4]).dtype

在这里插入图片描述

torch中还有其他的数据类型的数据,将浮点型转化为其他的数据类型的方法如下

a = torch.tensor([1.2,3.4])
a.dtype
a.int().dtype
a.long().dtype
a.float().dtype

代码创作世界——pytorch深度学习框架数据类型_第1张图片

获取默认数据集的方法

torch.get_default_dtype()

张量的生成

张量的生成可以有很多的方式,下面对生成的方式进行列举

  • (1)使用torch.tensor() python的列表或者序列可以通过torch.tensor()构造张量
A =  torch.tensor([[1.0,1.0],[2,2]])
A

在这里插入图片描述

张量的维度可以通过.shape查看,并使用.size()方法计算张量的形状的大小,使用.numel()方法计算张量中包含的元素的数量
例如:

# 获得张量的维度
A.shape
# 获得张量的形状
A.size()
# 计算张量中包括的元素的数量
A.numel()

代码创作世界——pytorch深度学习框架数据类型_第2张图片

在使用torch.tensor()函数的时,可以使用参数dtype来指定张量的数据类型,使用参数requires_grad来指定是否需要计算梯度。只有计算梯度的张量才能在深度网络优化时根据梯度的大小进行更新。

B = torch.tensor((1,2,3),dtype=torch.float32,requires_grad=True)
B

在这里插入图片描述
需要注意的是只有浮点型的数据才能计算梯度,其他的数据类型不能计算张量否则会报错

y= B.pow(2).sum()
y.backward()
B.grad

在这里插入图片描述

  • (2)使用torch.Tensor()函数来生成张量(可以根据形状生成指定的张量)
C = torch.Tensor([1,2,3,4])
C

在这里插入图片描述

也可以根据形状参数生成特定尺寸的张量。例如生成3x3的张量

D = torch.Tensor(3,3)
D

在这里插入图片描述

针对已经生成的张量可以使用torch.**_like()系列函数生成与指定张量相同性质相似的张量

# 创建一个和D大小相同且全是1的张量
torch.ones_like(D)

在这里插入图片描述

使用torch.zeros_like()函数生成与D维度相同的全为0的张量

torch.zeros_like(D)

在这里插入图片描述

使用torch.rand_like()函数生成与D维度相同的张量

torch.rand_like(D)

在这里插入图片描述

  • (3)张量与numpy数据的互换
    pytorch中提供了Numpy数组和张量互换的函数,非常方便对张量进行相关的操作

将numpy数组转化为pytorch张量,可以使用torch.as_tensor()函数和torch.from_numpy函数
举例如下:

import numpy as np
F = np.ones((3,3))
F
# 使用torch.as_tensor()函数
Ftensor = torch.as_tensor(F)
Ftensor
# 使用torch.from_numpy
Ftensor = torch.from_numpy(F)
Ftensor

代码创作世界——pytorch深度学习框架数据类型_第3张图片

使用torch.numpy()函数即可转化为Numpy数组

Ftensor.numpy()

在这里插入图片描述

总结

通过pytorch代码构造张量的过程,体现出了代码创造童话,共建快乐世界。

你可能感兴趣的:(深度学习,pytorch,python)