【pyTorch基础】(1) 张量的数据类型

最近想学一下图卷积GCN,教程竟然都是pyTorch的,作为一名重度TensorFlow用户太崩溃了,没办法只能学一波pyTorch了。

首先在pyTorch中,一个张量(tensor)可能会被部署在CPU上,也可能被部署在GPU上。它们的数据类型是不同的。即使是同一个数据,被部署在不同位置,那么它的数据类型也是不一样的。数据类型如下:

import torch
'''
# pyTorch的数据类型
# -------------------------------------- #
#(1)CUP上的数据类型
# torch.FloatTensor       (float32)
# torch.DoubleTensor      (float64)
# torch.ByteTensor        (float16)
# torch.CharTensor        (uint8)
# torch.ShortTensor       (int8)
# torch.InitTensor        (int16)
# torch.LongTensor        (int64)
# -------------------------------------- #
#(2)GUP上的数据类型
# torch.cuda.FloatTensor       (float32)
# torch.cuda.DoubleTensor      (float64)
# torch.cuda.ByteTensor        (float16)
# torch.cuda.CharTensor        (uint8)
# torch.cuda.ShortTensor       (int8)
# torch.cuda.InitTensor        (int16)
# torch.cuda.LongTensor        (int64)
# -------------------------------------- #
'''

1. 查看数据类型

查看张量数据类型: tensor.type()

python方法查看基本数据类型: type( tensor )

查看tensor是否是指定的数据类型: isinstance( tensor, 张量类型 )

将CPU上的张量部署到GPU上: tensor.cuda()

查看张量的内存占用数量: tensor.numel()

# 创建一个二维tensor, 均值=0,方差=1的随机正态分布
data = torch.randn(2,3)  # 两行三列

data.type()  # 'torch.FloatTensor'

type(data)   # torch.Tensor  返回基本数据类型

# 检验是否是给定的tensor类型
isinstance(data, torch.FloatTensor)  # True

# 检验是否是GPU上的tensor类型
isinstance(data, torch.cuda.FloatTensor)  # False

# 将cpu上的tensor搬运到GPU上
data_GPU = data.cuda()

# 再次检验是否是GPU上的tensor类型
isinstance(data_GPU, torch.cuda.FloatTensor)  # True

# 查看占用的内存数量
data.numel()  # 2*3=6

2. 查看维度

查看张量的形状: tensor.shape   和   tensor.size()

查看张量的维度(深度): tensor.dim()

# 创建一个标量tensor
data = torch.tensor(2.2)
# 查看张量的维度
data.shape   # torch.Size([]) 表示0维
data.dim()   # 0
data.size()  # torch.Size([])

# 创建一个一维的向量tensor
data = torch.tensor([1.1, 2.2, 3.3])
# 查看张量的维度
data.shape   # torch.Size([3]) 
data.dim()   # 1
data.size()  # torch.Size([3])

# 创建一个二维tensor
data = torch.randn(2,3)
# 查看张量的维度
data.shape   # torch.Size([2, 3])
data.dim()   # 2
data.size()  # torch.Size([2, 3])

3. 张量的类型

3.1 标量类型

标量就是一个数值,维度=0,在神经网络中对损失函数值求平均,这个结果值通常就是个标量

# 将标量1.0变成tensor类型
data = 1.0
data = torch.tensor(data)
# 维度=0的标量tensor
print(data)  # tensor(1.)

3.2 向量类型

向量的维度=1,有若干个元素,在神经网络中神经元的偏置项,一般都是向量

扫描二维码关注公众号,回复: 13803641 查看本文章

将numpy类型转为tensor类型: torch.from_numpy( np数组 )

# 创建一个长度为1的向量
data = torch.tensor([1.1])
print(data)  # tensor([1.1000])

# 创建一个长度为2的向量
data = torch.tensor([1.1, 2.2])
print(data)  # tensor([1.1000, 2.2000])

# 生成维度=1,且size=1的float类型的tensor向量
data = torch.FloatTensor(1)  # 数据是随机初始化的
print(data)  # tensor([9.2755e-39])

# 生成维度=1,且size=2的float类型的tensor向量
data = torch.FloatTensor(2)  # 数据随机初始化
print(data)  # tensor([9.3233e+27, 6.4843e+16])

# 通过numpy生成一个长度=2的向量
data = np.ones(2)  # [1., 1.]
data = torch.from_numpy(data)  # tensor([1., 1.], dtype=torch.float64)

3.3 二阶矩阵类型

二阶矩阵的维度=2,例如shape=[b, n],在CNN中可理解为,有b张图像,每张图有n个像素值

查看张量的某个维度的大小: tensor.shape[ i ]   和   tensor.size( i )

# 创建一个2行3列的tensor,随机正态分布
data = torch.randn(2,3)
# tensor([[ 1.3635, -0.2479,  1.0086],
#         [-1.5084,  0.3019,  0.5033]])

# 查看tensor的形状
data.shape  # torch.Size([2, 3])
data.size()  # torch.Size([2, 3])

# 查看tensor的shape的第0个元素
data.shape[0]  # 2
data.size(0)  # 2

3.4 高阶矩阵类型

高阶矩阵一般指二阶以上的,在CNN中常用的是四维的tensor,如shape=[b,w,h,c],代表b张图片,每张图片的宽高(w,h),每张图片的通道数为c

# 随机0-1均匀分布生成三维tensor
data = torch.rand(1,2,3)
# tensor([[[0.9147, 0.7105, 0.7755],
#          [0.7555, 0.6148, 0.2824]]])

# 查看tensor的形状
data.shape  # torch.Size([1, 2, 3])

# 取第0个元素的所有值
data[0]
# tensor([[0.7642, 0.4086, 0.9094],
#         [0.3662, 0.4620, 0.2555]])

# 将shape返回的数据类型变成list类型
data[0].shape  # torch.Size([2, 3])
list(data[0].shape)  # [2,3]

猜你喜欢

转载自blog.csdn.net/dgvv4/article/details/124194883