前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变量类型(cpu/gpu)

变量类型(cpu/gpu)

作者头像
狼啸风云
修改2022-09-02 21:04:06
1.9K0
修改2022-09-02 21:04:06
举报
文章被收录于专栏:计算机视觉理论及其实现

前言

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的例子:

代码语言:javascript
复制
>>> 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要慢很多,要结合实际情况进行思考。

各位看官老爷,如果觉得对您有用麻烦赏个子,创作不易,0.1元就行了。下面是微信乞讨码:

添加描述

添加描述

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • ① 基本类型
  • ② 张量类型之间的转换
    • 思考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档