由于我们深度学习上课用的是另一个深度学习框架Tensorflow,但是我很不喜欢这个框架于是和老师提了一下让我使用Pytorch,老师也答应了,但是她说不会提供Pytorch的代码,因此每次的作业都需要我自己思考和找资料,暑假实际上学了一部分Pytorch了但是担心会忘记一些功能因此写几篇博客以便之后忘记了可以回忆。
Pytorch介绍
做深度学习的人应该知道深度学习目前有两个主流的框架一个是曾经的老大哥Tensorflow(但我很不喜欢,感觉keras就算有用起来也很不方便),另一个就是我们今天要谈的Pytorch。Pytorch是由FaceBook开发的,笔者非常喜欢Pytorch的原因实际上就是因为Pytorch非常简单易用,而且其梯度计算采取的是动态图,因此非常方便。
Pytorch安装教程
首先在安装之前你得保证你的电脑有Anaconda或者Miniconda,这是Python的一个环境管理工具,内部集成了很多Python的包,但是我们用不上或者说要自己在安装一个。最重要的还是它可以提供虚拟环境供我们使用,假设某个虚拟环境出错了你也可以快速的重新建一个虚拟环境而不是像Python的普通版那样很麻烦。(这个我们深度学习老师就说过她研究生的时候学习Tensorflow的时候将GPU版本和CPU版本安装在一起导致这个环境下Tensorflow的GPU和CPU都没有办法用了)
同时如果你要安装GPU版本你得保证你的电脑是N卡。
查看方式,在cmd窗口输入
nvidia-smi
如果显示了上面的就说明你的电脑里面是有N卡的。
笔者安装的也是GPU版本,我的电脑是一个笔记本是Y7000P拯救者,但是很可惜这台笔记本的显卡配置很拉(RTX 3050,显存就4GB实际上完全不能满足大部分深度学习要求)
下面就简单来谈一下怎么安装GPU版本。网上主流的方法肯定是去NVIDIA的官网上下载cuda和cudnn,这个方法当然是最好的,但是本身cuda的安装是非常麻烦的需要配置很多东西。因此可以用更简单的方法就是cudatoolkit这个是一个包里面集成了cuda的驱动。为什么要这个方式,首先主流的方式当然是最好的,但是我的笔记本或者说大部分笔记本实际上显卡配置都是比较垃的,因此很多时候深度学习项目不可能会在笔记本上跑会烧坏显卡的,很多时候需要租用服务器来做,因此我觉得可以用这个简单的方式拿来学习,真正的项目可以依靠租用服务器来完成,当然这都是后面的事情了。
下面简单的介绍一下如何来安装Pytorch的GPU版本。
可以参考这个视频
值得注意的是Pytorch毕竟是外国人发明的,因此我们安装的时候会很慢,这里推荐采用清华镜像源的方法。
同时numpy,pandas,matplotlib,sklearn,opencv都建议安装一下,另外可以安装一下数据分析常用的jupyter notebook,我这里还安装了沐神提供的d2l包里面有很多写好的pytorch函数。
沐神提供的d2l包安装的时候会下载jupyter。
如果打开你的jupyter notebook的时候发现你的jupyternotebook报错了显示kernel error,那么你可以参考这个文章。
Jupyter Notebook FileNotFoundError: [WinError 2] 系统找不到指定的文件_搬砖少年小磊za的博客-CSDN博客
Pytorch初步使用
我们打开jupyter notebook
新建一个文件夹叫做深度学习torch,当然也可以用别的名字
在这个文件夹中我们创建一个python文件
然后在这里测试一下我们的torch是否安装好了。
首先导入库
import torch
然后我们查看一下torch的版本
另外查看我们的GPU是否可用
Pytorch的张量Tensor
tensor是Tensorflow和Pytorch的核心数据结构,译为张量。简单的理解张量就是N维数组。类似于numpy中的ndarray。但是ndarray不可以在GPU上运行但是tensor天然支持GPU。
Pytorch的张量创建
最常见的方法就是tensor这个方法。
tensor可以通过传入的data来转化为张量,传入的data可以是list也可以是ndarray。
这里注意如果我们用原生的列表去创建tensor的时候,此时里面的数据类型默认是int64,而ndarry由于创建的时候就是int32,那么tensor创建的时候也是int32
除此之外还有form_numpy这个方法可以将ndarray变为tensor
它们的本质区别是tensor是深拷贝,form_numpy是浅拷贝 。
除了上述方法,Pytorch也提供了类似于ndarray创建数组的方法。
d2l包的使用
最后我们可以来使用一下沐神的深度学习包d2l。
这个包里面提供了大量的简单的函数。我们用其中的一个例子来看一下