PyTorch教程(一):张量数据类型

本文详细介绍了PyTorch中张量的数据类型,包括int、float、IntTensor、FloatTensor等,并讨论了如何用One-hot或Embedding表示字符串。通过实例展示了张量的创建、类型转换以及在CPU和GPU之间的操作。此外,还讲解了张量的维度,包括标量、向量的概念,以及如何通过torch.randn()和torch.tensor()生成不同维度的张量。最后,通过实际示例说明了张量的形状、大小和元素数量的获取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pythonPyTorch
intIntTensor of size()
floatFloatTensor of size()
Int arrayIntTensor of size[d1,d2,…]
Float arrayFloatTensor of size [d1,d2,…]
string

需要注意的是,python中的string,在PyTorch中没有对应的数据类型,一般使用One-hot可以进行表示,也就是[0,1,0,0,0]的方式表示一个字符串,或者使用Embedding的方式,常用的有Word2vec和glove

1. 类型推断

import torch

a = torch.randn(2,3) # 使用随机正态分布方法,均值0,方差1,N(0,1),新建了2维向量,两行三列,
a.type() # 'torch.FloatTensor'
type(a) #  <class 'torch.Tensor'>
isinstance(a, torch.FloatTensor) # True

需要注意的是同一个tensor在CPU和GPU中是不一样的。

isinstance(a, torch.cuda.FloatTensor)  # False
a = a.cuda()
isinstance(a, torch.cuda.FloatTensor)  # True

a.cuda()会返回一个gpu上的引用。

标量

b = torch.tensor(1.3)
b.shape # torch.Size([])
b.dim() # 0
b.size() # torch.Size([])

torch.tensor(1.)就创建了值为1的标量。torch.tensor(1.3)创建了值为1.3000的标量。

注意,1.3是0维,但是[1.3]是1维,长度为1的Tensor

我们通常使用的loss就是维度为0的标量。

向量

在PyTorch中统一称向量为张量。

c = torch.tensor([1.1]) # 创建了1维的张量,值为1.100
c = torch.tensor([1.1, 2.2]) # 创建了2维的张量,值为1.1000, 2.2000

torch.FloatTensor(1) # 随机创建一个1维的Float张量,值随机 tensor([0.])
torch.FloatTensor(2) # 随机创建一个2维的Float张量,值随机 tensor([1.0842e-19, 1.9859e+00])

# 可以通过引入numpy来创建张量
data = numpy.ones(2) # 长度维2的向量,值为array([1., 1.])
torch.from_numpy(data) # 从numpy中引入数据,值为tensor([1., 1.], dtype=torch.float64)

我们通常使用的bias偏置,就是维度为1的张量。

需要注意的是,在PyTorch0.3以及之前的版本中,维度为0的张量是不存在的,例如loss=0.3的dim为1,在PyTorch0.4以及以后的版本中,loss=0.3表示一个标量。

举例:
下面一个例子中,dim=2,随机正态分布数据:

a = torch.randn(2,3) # 随机生成dim=2的tensor
# tensor([[-0.3537, -0.2374,  0.3935],
#        [ 0.0542, -0.2078,  0.6238]])
a.shape # torch.Size([2, 3])
a.size() # torch.Size([2, 3])
a.size(0) # 2
a.size(1) # 3
a.shape[0] # 2
a.shape[1] # 3

下面一个例子中,dim=3,随机均匀分布数据:

a = torch.rand(1,2,3) #生成随机均匀分布数据
# tensor([[[0.9005, 0.5394, 0.7798],
#        [0.5691, 0.3837, 0.1468]]])
a[0] 
# tensor([[0.9005, 0.5394, 0.7798],
#        [0.5691, 0.3837, 0.1468]])

三维张量,适合RNN这种网络结构。
下面一个例子中,dim=4,随机均匀分布数据:

a = torch.rand(2,3,28,28) #生成随机均匀分布数据,例如在图片中,2表示两张照片,3表示颜色通道RGB,28表示长,28表示宽

四维张量,适合卷积神经网络。

a = torch.rand(2,3,28,28)
a.numel() # 表示tensor占用内存的数量 number of element
a.dim() # a的维度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值