一.PyTorch简介与环境配置
PyTorch是一个开源的Python机器学习库,是一个相当简洁且高效快速的框架,是Torch在Python上的衍生。
因为Torch是一个使用Lua语言的神经网络库,Torch很好用,但是 Lua 又不是特别流行,所以开发团队将Lua的Torch移植到了更流行的语言——Python上。PyTorch一发布就引起了剧烈的反响。
下载网址:https://pytorch.org/。
Anaconda是由Continuum Analytics开发的一款集成了Conda、Python以及一大堆安装好的工具包的开源软件。
其中Conda是一个包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。
下载网址:https://www.anaconda.com/。
GPU(可选):一张高性能NVIDIA显卡。
具体安装教程可以参考B站up:我是土堆 的视频BV1hE411t7RN。
IDE推荐:PyCharm
自带汉化包插件
可更换Python解释器,这里要选择第二行的Anaconda自带的Python(在这个Python环境中安装了Pytorch框架)。
可编辑文件,也可在Python控制台实现交互式编辑
在下面菜单栏的Python Packages中可以查看本解释器已安装的第三方包。
二.PyTorch学习
(一)Torch与Numpy
Torch 自称为神经网络界的 Numpy, 因为他能将 Torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算。
所以神经网络的话, 当然是用 Torch 的 tensor 形式数据最好。
(二)张量tensor
张量tensor分为0维、1维、2维和多维。
0维张量就是标量。
1维张量就是数组。
2维张量就是矩阵。
(三)Torch 中的数学运算
Torch和Numpy中的很多方法大同小异。
(四)矩阵运算
除了简单的计算, 矩阵运算才是神经网络中最重要的部分。
tensor.dot()是把两个张量的每一对元素都分别对应相乘再相加。
最后结果应该是30.0
(五)利用PyTorch简单地实现几种激活函数
(六)建造第一个神经网络——关系拟合 (回归)
如何在数据当中找到他们的关系, 然后用神经网络模型来建立一个可以代表他们关系的线条。
torch.unsqueeze(input, dim, out=None):起升维的作用,参数dim表示在哪个地方加一个维度,dim范围在:[-input.dim() - 1, input.dim() + 1]之间。比如输入input是一维,则dim=0时数据为行方向扩,dim=1时为列方向扩,再大会出现错误。
tensor.size(x)用于返回tensor第 x 维的长度,不放参数即返回tensor的形状(同tensor.shape)。
torch.rand(x.size()) →随机生成一个与x形状相同的矩阵,取值在(0,1)区间。
1.首先,我们创建一些假数据来模拟真实的情况. 比如一个一元二次函数: y = a * x^2 + b, 我们给 y 数据加上一点噪声来更加真实的展示它(如果不加噪声,得到的y仅仅是一条x平方的曲线,而不是一些需要拟合的点)
2.然后,我们建立一个神经网络,这里可以直接运用 torch 中的体系。先定义所有的层属性(init()), 然后再一层层搭建(forward(x))层与层的关系链接。
多少个输入,多少个隐藏层神经元,多少个输出
self.hidden(x) → 使用隐藏层加工一下x,x作为输入经过隐藏层,得到输出为n_hidden。
F.relu() → 用relu激励函数激励n_hidden。
上页搭建的神经网络的结构如下:
3.接下来,我们开始训练搭建好的神经网络。
损失函数的实例化:
损失函数输入是一个输入的pair(对):(output, target),然后计算出一个数值来评估output和target之间的差距大小;
其中output代表的是神经网络评估出来的输出值yk,>target代表(有监督训练的,真实的)标签tk。
torch.nn中有若干个不同的损失函数可供使用,比如nn.MSELoss就是通过计算均方损失来评估输入和目标值之间从差距【越小越好】