深度学习初探/02-Pytorch知识/01-Tensor张量数据类型

本文深入探讨了PyTorch中的张量数据类型,包括Tensor的维度概念、Python数据类型与PyTorch数据类型的对比,以及如何处理字符串。介绍了常见Tensor类型如FloatTensor、ByteTensor和IntTensor,并展示了如何判断Tensor是否在GPU上以及如何迁移。此外,还阐述了不同维度张量的应用场景,如标量、向量、矩阵等,以及它们在神经网络中的作用。
摘要由CSDN通过智能技术生成

深度学习初探/02-Pytorch知识/01-Tensor张量数据类型

一、Tensor的基本概念
1、python数据类型与PyTorch数据类型的对比

在这里插入图片描述
Tensor中,size表示维度,决定了该数据的数据类型(如int型变量3,其dimension = 0;若要表示二维数组,则dimension = 2)

2、PyTorch中String类型的表示与处理

PyTorch本身不支持string,如果要处理string,必须要采用编码的方式

编码方式
ONE-HOT类似于ASCII码,用一维向量来表示类别,如[1 0]表示“cat”,[0 1]表示“dog”缺点:表示大量词汇过于浪费(只有一个1,其余全是0);不能很好的表示语义相关性
Embedding如经典的word2vec、glove
3、PyTorch中常见的Tensor类型

注意区分CPU和GPU中的Tensor,GPU_Tensor在CPU_Tensor中间加上cuda

常用:FloatTensor、ByteTensor、IntTensor

在这里插入图片描述

Δ \Delta Δ判别Tensor的数据类型
import torch
# randn是根据标准正态分布N(0,1)随机生成的tensor
a = torch.randn(2, 3) # 新建一个2维的tensor,2行,3列

(1)查看Tensor的具体数据类型(FloatTensor?IntTensor?and so on)

# a.type()
print('a.type() = ', a.type())  # 返回一个string,代表该tensor的类型

(2)调用python自带函数type(),查看变量的基本数据类型

# (用的少)python自带的type方法,只能返回基本的数据类型(torch.Tensor,而不是torch.FloatTensor)
print('type(a) = ',type(a))

(3)参数的合法化检验:该变量是否是xxx类型?

# 参数的合法化检验:该变量是否是xxx类型?
print('a is FloatTensor ? ',isinstance(a, torch.FloatTensor))

(4)检测某Tensor是否在GPU上?如果不在,如何将其搬运到GPU上?

# 检测某Tensor是否在GPU上
print('a is on GPU ? ',isinstance(a, torch.cuda.FloatTensor))
# 如果为False,则将其搬运到GPU上
a = a.cuda()  # .cuda()会返回一个GPU类型的引用
#再检测
print('a is on GPU ? ',isinstance(a, torch.cuda.FloatTensor))

上述实验结果:
在这里插入图片描述


二、各个维度的Tensor:
1、Dimension == 0的张量:标量

标量的声明方法

In: torch.tensor(1.3)
Out: tensor(1.3000)

此处,1.3是0维,但[1.3]是一个1维、长度为1的Tensor

标量的应用场景:计算Loss
Δ \Delta Δ检验tensor的维度(验证一个tensor是否为标量)
a = torch.tensor(2.2)
print('a.shape == ', a.shape,'\n',   # 是一个空的list类型的size(即一个标量)
      'len(a.shape) == ',len(a.shape),'\n',    # 0维
      'a.size() == ',a.size())     

在这里插入图片描述

2、Dimension == 1的张量:向量

向量的声明方法:

方法1:使用 .tensor(数据的内容)

In: torch.tensor([1.1, 2.2])
Out: tensor([1.1000, 2.2000])

方法2:使用 .FloatTensor(数据的shape)
该方法会对数据内容进行随机初始化

In: torch.FloatTensor(2)
Out: tensor([-2.4370e-08,  4.5915e-41])

方法3:使用numpy引入向量

In: data = np.ones(2)   # numpy初始化默认的数据值为1
    print(data)
Out: [1. 1.]
In: print(torch.from_numpy(data))   # 将numpy格式转换为FloatTensor
Out: tensor([1., 1.], dtype=torch.float64)
向量的应用场景:

(1)Bias神经元偏置;
(2)Linear Input(神经网络线性层的输入,如:将[28,28]的手写数字图片进行flat平坦化操作,打平成[784]的Tensor进行输入)

Δ \Delta Δ如何区分dim、size、shape
类型特性
dimension描述
shape/size描述有
3、Dimension == 2的tensor

随机生成一个2行3列的tensor

In: a = torch.randn(2,3)  # 随机生成一个2行3列的tensor,有行有列,所以dim==2
Out: tensor([[-0.5616, -1.4493,  1.5513],
        	[-0.4550, -1.1353, -0.4386]])  # dim等于多少,就叠多少‘[]’

注意:shape用方括号[ ],size用圆括号( )

调用a.shape和a.shape[ ]实现对a整体shape的打印以及对行、列shape的分别打印

In: print(a.shape,a.shape[0],a.shape[1])
Out: torch.Size([2, 3]) 2 3

调用a.size和a.size( )实现对a整体size的打印以及对行、列size的分别打印

In: print(a.size(),a.size(0),a.size(1))
Out: torch.Size([2, 3]) 2 3
应用场景:带有batch的Linear Input

如同时处理4张线性输入的图片:[4,784],dim1表示选择哪一个图片,dim2用于表示该照片的具体数据

4、Dimension == 3 的tensor

生成方法:类比上面即可

应用场景:带有batch的RNN Input

如: 一句话由10个单词组成,每次传送20句话,每句话使用100bit进行ONE HOT编码
⇒ \Rightarrow [word_num, batch, feature]==[10,20,100]

5、Dimension == 4 的tensor
应用场景:基于CNN的图片处理

如:[batch,通道数, height, width] == [5,1,28,28] 每次处理5张mnist数据集中的图片
(彩色图片由RGB组成,通道数可以为3;手写数字图片只有灰度值,只用1个通道即可)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值