学习目标:
- 掌握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,张量类型)
将张量部署到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、张量的类型
根据维度的不同,张量的类型也不同。
当dim = 0时,为标量,标量就是一个数值。
# 将标量1.0变成tensor类型
data = 1.0
data = torch.tensor(data)
# 维度=0的标量tensor
print(data) # tensor(1.)
当dim = 1时,为向量。
将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([1.4013e-45])
# 生成维度=1,且size=2的float类型的tensor向量
data = torch.FloatTensor(2) # 数据随机初始化
print(data) # tensor([-6.7288e-12, 4.5907e-41])
# 通过numpy生成一个长度=2的向量
data = np.ones(2) # [1., 1.]
data = torch.from_numpy(data) # tensor([1., 1.], dtype=torch.float64)
当dim = 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
当dim > 2时,为高阶矩阵。在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]
总结:
经过摸鱼划水的一上午,基本掌握了张量数据类型,接下来需要多练习,继续加油。