Pytorch学习笔记(一)——张量数据类型

学习目标:

  • 掌握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]

总结:

经过摸鱼划水的一上午,基本掌握了张量数据类型,接下来需要多练习,继续加油。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值