前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[开发技巧]·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧

[开发技巧]·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧

作者头像
小宋是呢
发布2019-06-27 14:54:19
1.9K3
发布2019-06-27 14:54:19
举报
文章被收录于专栏:深度应用

开发技巧·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧

配合本文推荐阅读:PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)

1.问题描述

我们使用Numpy也是可以手动去编写神经网络进行反向传播深度学习的,就是有两个问题,

1.Numpy手动去编写神经网络很繁琐,代码量较大,不利于大规模开发;2.Numpy无法直接使用GPU加速计算

看到网上有很多人说PyTorch很好用,比TensorFlow优雅便捷。个人认为其中一个很主要的原因PyTorch很类似与Numpy,对数据操作处理很简单。并且PyTorch是支持使用GPU加速的,所以有人比喻PyTorch是GPU版本的Numpy。

PyTorch为了实现GPU加速功能,引入了Tensor,为了实现自动求导功能引入了Variable。但是由于引入了这些新的概念,会让一些不理解初学者在使用的时候遇到一些问题。

2.问题剖析

我们现在已经知道了PyTorch为了实现GPU加速功能,引入了Tensor,为了实现自动求导功能引入了Variable。我们一般读取的数据都是以Numpy Array方式的。在TensorFlow,Numpy的数据会在输入网络后自动转换为Tensor,一般不需要我们进行显性操作,当然偶尔也会有例外,可以参考 [开发技巧]·TensorFlow中numpy与tensor数据相互转化。但是在PyTorch,需要我们自己进行显性操作才可以的。

下面我以一个网络训练的过程来讲解它们之间如何进行相互的转换。

  • 首先我们会读取Numpy的数据,我们为了能够送入网络,使用GPU计算加速,所以要进行Numpy2Tensor操作,由于网络输入输出都是Variable,我们还需要Tensor2Variable。在训练的过程中,我们需要取出loss的值,由于loss参与了backward(),所以此时的loss已经变成了Variable,我们取出loss时需要取出的是Tensor。同样的,如果我想取出网络输出的结果时,由于网络输入输出都是Variable,也需要执行Variable2Tensor,如果进一步我们想把loss显示出来,就需要Tensor2Numpy

总结一下,真正和我们开发人员直接接触的是Numpy数据,需要送入网络时进行Numpy2Tensor,如果一些Tensor作为参数需要求解梯度信息时进行Tensor2Variable。需要从Variable取数据时,使用Variable2Tensor。对Tensor进行读取操作时需要Tensor2Numpy

3.转换方法

  • Numpy2Tensor:1. torch.from_numpy(Numpy_data) 2. torch.tensor(Numpy_data)
  • Tensor2Variable: 1. Variable(Tensor_data)
  • Variable2Tensor: 1. Variable_data.data()
  • Tensor2Numpy : 1.Tensor_data.numpy()

注意一点,Numpy与Variable无法直接转换,需要经过Tensor作为中介。

Hope this helps

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开发技巧·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧
    • 1.问题描述
      • 2.问题剖析
        • 3.转换方法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档