前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何一步一步使用Pytorch与GPU训练深度神经网络

如何一步一步使用Pytorch与GPU训练深度神经网络

作者头像
深度学习与Python
发布2019-06-18 21:00:18
3.7K0
发布2019-06-18 21:00:18
举报
文章被收录于专栏:深度学习与python

Pytorch是python的一个目前比较火热的深度学习框架,Pytorch提供在GPU上实现张量和动态神经网络。对于学习深度学习的同学来说,Pytorch你值得拥有。本文将介绍pytorch的核心张量与梯度,以及如何一步一步的使用GPU训练你的第一个深度神经网络。

张量

张量是数字,向量,矩阵或任何n维数组,类似于Numpy中的ndarray,张量是PyTorch中构建神经网络的基础。首先,我们创建一个只有一个数字的张量:

其中4.是4.0的简写,表示该数字类型为浮点数。我们可以通过dtype来查看元素的属性:

接下来我们创建更复杂的向量、数组和矩阵:

张量的维度大小是任意的,我们可以使用.shape来查看张量的维度。

张量运算梯度

下面我们通过一个例子来看一下张量的算术运算,首先我们创建三个张量:

可以看到在创建张量时我将w和b中的requires_grad设为True,而x没有设置,这个下面我们会用到。记住这是个重点!然后通过一个线性组合计算得到y,即:

这是一个简单的线性回归,注意这里我们就要用到上面设置的requires_grad,现在我们用y.backward()来求y对w、x和b的偏导数得:

正如结果所示,x没有设置requires_grad,所以求得的梯度为None;而w和b设置了requires_grad,则得到其梯度。

创建神经网络

再简单看了一下张量和梯度后,接下来我们就要开始今天真正的主题:使用Pytorch创建我们的第一个深度神经网络。还是机器学习的老套路,建立一个深度学习模型依然是那几步。首先导入库和数据:

这里我们使用pytorch自带的数据集datasets中的mnist数据。

导入数据后,我们需要划分训练集和测试集:

现在我们使用SubsetRandomSampler为每个数据子集创建数据加载器并随机对元素进行采样。

处理完数据,我们就要开始创建我们的模型,我们将创建一个包含32个隐藏层的模型。模型结构如下:

具体代码如下:

在处理图像数据时,随着数据量的增加和网络层次的加深我们需要使用GPU来加速训练。GPU包含数百个内核,这些内核可以在短时间内对浮点数执行快速的矩阵运算,从而使训练多层深度神经网络成为可能。你可以在Kaggle内核或Google Colab上免费使用GPU ,或者在Google Cloud Platform,Amazon Web Services或Paperspace等服务上租用GPU驱动的计算机。在使用GPU时,我们可以使用torch.cuda.is_available命令来查看是否有可使用的GPU设备。然后我们定义一个DeviceDataLoader类来包装我们现有的数据加载器并将数据移动到所选设备。

好的,我们终于可以开始训练模型了,可以过程应该是最爽的,在训练模型时,我们以交叉熵作为损失函数以及准确率作为评估指标。定义损失和模型训练的几个函数如下:

该evaluate函数计算验证集的总损失

fit()函数接收模型训练参数并启动模型训练

通过matplotlib对训练过程的准确率可视化来直观了解模型的效果。

总结与改进

  • 我们使用ReLU激活函数将非线性引入模型,使其能够了解输入和输出之间更复杂的关系。
  • 通过使用GPU加速我们的模型训练,使得我们可以定义更深的模型层数以及更大的数据量。
  • 尝试更改隐藏图层的大小,或添加更多隐藏图层,看看是否可以获得更高的准确度。
  • 尝试更改批量大小和学习率,以确定您是否可以在更少的时期内获得相同的准确度。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档