PyTorch学习笔记(2)——变量类型(cpu/gpu)

前言

PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。系统默认的torch.Tensor是torch.FloatTensor类型。例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensor; data.cuda()就将其转换为GPU的张量类型,torch.cuda.FloatTensor类型。


① 基本类型

如图所示,下面是cpu和gpu版本的张量(Tensor)的基本类型,一共是8种。

这里写图片描述

  • torch.FloatTensor(2, 2) 构建一个2*2 Float类型的张量
    这里写图片描述
  • torch.DoubleTensor(2, 2) 构建一个2*2 Double类型的张量
  • torch.ByteTensor(2, 2) 构建一个2*2 Byte类型的张量
  • torch.CharTensor(2, 2) 构建一个2*2 Char类型的张量
  • torch.ShortTensor(2, 2) 构建一个2*2 Short类型的张量
  • torch.IntTensor(2, 2) 构建一个2*2 Int类型的张量
  • torch.LongTensor(2, 2) 构建一个2*2 Long类型的张量

官网还介绍了从python的基本数据类型list和科学计算库numpy.ndarray转换为Tensor的例子:

>>> torch.tensor([[1., -1.], [1., -1.]])
tensor([[ 1.0000, -1.0000],
        [ 1.0000, -1.0000]])
>>> torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
tensor([[ 1,  2,  3],
        [ 4,  5,  6]])

② 张量类型之间的转换

2.1 CPU和GPU的Tensor之间转换

从cpu –> gpu,使用data.cuda()即可。
若从gpu –> cpu,则使用data.cpu()

2.2 Tensor与Numpy Array之间的转换

Tensor –> Numpy.ndarray 可以使用 data.numpy(),其中data的类型为torch.Tensor
Numpy.ndarray –> Tensor 可以使用torch.from_numpy(data),其中data的类型为numpy.ndarray

2.3 Tensor的基本类型转换(也就是float转double,转byte这种。)

为了方便测试,我们构建一个新的张量,你要转变成不同的类型只需要根据自己的需求选择即可

  • tensor = torch.Tensor(2, 5)

  • torch.long() 将tensor投射为long类型
    newtensor = tensor.long()

  • torch.half()将tensor投射为半精度浮点(16位浮点)类型
    newtensor = tensor.half()

  • torch.int()将该tensor投射为int类型
    newtensor = tensor.int()

  • torch.double()将该tensor投射为double类型
    newtensor = tensor.double()

  • torch.float()将该tensor投射为float类型
    newtensor = tensor.float()

  • torch.char()将该tensor投射为char类型
    newtensor = tensor.char()

  • torch.byte()将该tensor投射为byte类型
    newtensor = tensor.byte()

  • torch.short()将该tensor投射为short类型
    newtensor = tensor.short()

思考

据我目前使用来看,最常用的还是Tensor.byte(), Tensor.float()。因为pytorch底层很多计算的逻辑默认需要的是这些类型。但是如果当你需要提高精度,比如说想把模型从float变为double。那么可以将要训练的模型设置为model = model.double()。此外,还要对所有的张量进行设置:pytorch.set_default_tensor_type('torch.DoubleTensor'),不过double比float要慢很多,要结合实际情况进行思考。


参考资料

[1] pytorch张量torch.Tensor类型的构建与相互转换以及torch.type()和torch.type_as()的用法
[2] PyTorch torch.Tensor 教程

  • 28
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值