Pytorch的基本概念

一、什么是pytorch?为什么选择pytorch?
pytorch是最近非常火热的一个深度学习框架,PyTorch 是 Torch 在 Python 上的衍生. 因为 Torch 是一个使用 Lua 语言的神经网络库, Torch 很好用, 但是 Lua 又不是特别流行, 所有开发团队将 Lua 的 Torch 移植到了更流行的语言 Python 上.,于是产生了pytorch。
据 PyTorch 自己介绍, 他们家的最大优点就是建立的神经网络是动态的, 对比静态的 Tensorflow, 他能更有效地处理一些问题, 比如说 RNN 变化时间长度的输出. 而我认为, 各家有各家的优势和劣势, 所以我们要以中立的态度. 两者都是大公司, Tensorflow 自己说自己在分布式训练上下了很大的功夫, 那我就默认 Tensorflow 在这一点上要超出 PyTorch, 但是 Tensorflow 的静态计算图使得他在 RNN 上有一点点被动 (虽然它用其他途径解决了), 不过用 PyTorch 的时候, 你会对这种动态的 RNN 有更好的理解.
而且 Tensorflow 的高度工业化, 它的底层代码… 你是看不懂的. PyTorch 好那么一点点, 如果你深入 API, 你至少能比看 Tensorflow 多看懂一点点 PyTorch 的底层在干嘛.
最后我的建议就是:

  • 如果你是学生, 随便选一个学, 或者稍稍偏向 PyTorch, 因为写代码的时候应该更好理解. 懂了一个模块, 转换 Tensorflow 或者其他的模块都好说.
  • 如果是上班了, 跟着你公司来, 公司用什么, 你就用什么, 不要脱群.

二、pytorch的安装

首先,我的系统是win7,4月25号,pytorch官方支持windows安装,下面分享安装过程和测试案例。
1.安装anaconda,方法查看:https://blog.csdn.net/zyb228/article/details/77995520
版本选择:anaconda3,python3.5的就可以
anaconda安装完成后,命令行里面输入conda --version,会显示conda的版本号,表示已经安装成功。如下图
如果出现 不是内外部命令,也不是可运行的程序,则说明环境变量没有配置好,需要把anaconda添加到环境变量里面。
Pytorch的基本概念
2.安装Pytorch.
由于conda安装很慢,而且出错,所以本文采用pip安装,安装的过程倒是没出现什么问题,但是想看看有没有安装成功的时候,试着导入了一下torch模块,结果提示找不着torch模块,然后把torch包所在的文件夹位置添加到环境变量里面问题就解决了。

但是再次导入torch模块时又出现一个warning,大意是,使用的python解释器是在anaconda的虚拟环境下的,但是虚拟环境需要**一下才不会影响模块的正常使用,于是使用 conda activate myenv **虚拟环境(myenv是你自己在anaconda里面添加的虚拟环境的名字)然后可以正常导入torch模块,无报错无警告。见下图:
Pytorch的基本概念
至此,python环境配置好了,python管理器anaconda也装好了,pytorch也成功安装,下面就先学习一下pytorch的基础概念。

三、pytorch基础概念
A Tensor library like Numpy, unlike Numpy it has strong GPU support. Lua is a wrapper for Torch (Yes! you need to have a good understanding of Lua), and for that you will need LuaRocks package manager.
  由此可见,Pytorch和Numpy有着千丝万缕的关系。为了提高学习效率,特意把两者之间的关联总结出来。
  关于pytorch与numpy的关联及各自的属性和方法,参考下面博客,总结十分详细了
https://blog.csdn.net/herosunly/article/details/88892326

四、pytorch基本实现
任务是通过神经网络完成一个回归问题。其中样本数为64个,输入层为1000维,隐藏层为100,输出层为10维。
神经网络的求导,本质上是求导的链式法则。但由于涉及矩阵的乘法,有时候就会使用到转置,从而保证矩阵相乘的正确。那什么时候需要添加转置操作呢?能想到的办法就是根据结果去反推或者采用矩阵的求导法则,具体可参考(https://blog.csdn.net/herosunly/article/details/89005067),具体可见如下代码:

Numpy代码:
Pytorch的基本概念
其中@表示矩阵的乘法。
Pytorch代码:
Pytorch的基本概念
Pytorch优化代码:Pytorch的基本概念
Pytorch的基本概念
https://discuss.pytorch.org/t/what-is-the-recommended-way-to-re-assign-update-values-in-a-variable-or-tensor/6125/2