PyTorch实践系列(二):GPU与CPU运行对比

写在开头:本节其实在学习了上一节的MNIST手写体分类后,自己又按照VGG的迷你版搭建了一遍网络,再运行的时候突然想到可以用GPU来跑,于是本节就GPU与CPU运算速度进行一个对比。

内容安排

今天主要是简单介绍一下VGG16网络架构还有如何将Torch代码放到GPU上运行,然后比较GPU与CPU运行的花费时间,因为采用的是MNIST数据集所以没办法搭建完整的VGG16网络,就按个迷你版的把。

正文开始

1.VGG16网络介绍
其实VGG16和VGG19的介绍网上还是挺多的,我们主要是想说一下他们怎么调用的层就行了,然后我们使用了哪些部分。
VGG-16的网络结构如下图所示,由13个卷积层和3个全连接层构成,并且在每个卷积层和全连接层后加上Relu处理,卷积核使用的是3维卷积核,图片来源于网络,
在这里插入图片描述
然后我们简单的介绍一些概念,这在之前的Torch系列1里有介绍我们卷积的过程以及RELU函数,还有池化层。那为什么需要这些操作呢?
Q1:为什么需要池化
在卷积之后会提取很多特征信息,但由于卷积核的滑动,相邻区域的特征信息是相似的,可以相互替代的,为了增加计算效率,降低信息维度,就可以使用池化进行降维,一般使用的是2维卷积核,步长也为2这样就会提取到尽量少的重复信息。
Q2:为什么需要ReLU激活函数
主要原因有以下几点,
1)因为如果没有ReLU的话,那么我们的矩阵计算永远都是线性运算,无法用非线性的方法去估计到目标值;
2)可以引入稀疏性,减少了参数的相互依存关系,缓解了过拟合问题的发生。
3)ReLU函数相对于sigmoid函数不具有正向的饱和性,不会在训练次数增加后接近饱和降低运行速度。
4)ReLU函数求导非常容易,效率很高。
Q3:为什么需要全连接层
将卷积层进行拉伸向量化,然后与一个参数矩阵相乘,变成一个低纬度的向量,最后得到与类别数相同的维度向量。那么为什么会需要从全连接层到卷积层又到全连接层的操作呢?
为什么需要全连接层到卷积层的操作?
1)向前传播时效率更高,根据CS2231课程的描述认为,全连接层编程卷积后能够在某些场景提升效率,比如需要让卷积网络在一张更高维度的输入图片进行分块滑动,得到多个输出。或者说在每次池化后会大大提升速度。
2)会使得更加的方便,通过设置步长已经卷积核维度或者padding,能够很轻易的得到我们希望得到的图片维度,不需要修改网络参数,直接可以接受多个维度的图片。
为什么卷积层还要转为全连接层呢?
因为最终的输出是一个预测类的结果,全连接层的作用就是将学到的“分布式特征表示”映射到样本标记空间的作用,起到一个分类器的作用。参考观点源于这里。但目前由于全连接层参数冗余的问题,几乎占神经网络80%的参数,有很多使用全局平均池化GAP去替代FC全连接层。但在参考文献中又指出及时FC目前作用被普遍看低但仍然有作用。这里我会在后面学习后再来分析。
2.搭建迷你版VGG
下面我们来展示一下我们搭建的一个迷你版VGG网络,代码如下,

class Cnet(torch.nn.Module):
    def __init__(self):
        super(Cnet, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv2d(1, 64, 3, 1, 1),
            nn.Conv2d(64, 64, 3, 1, 1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        self.conv2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, 1, 1),
            nn.Conv2d(128, 128, 3, 1, 1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )

        self.fc = nn.Sequential(
            nn.Linear(7*7*128, 4096),
            nn.ReLU(),
            nn.Dropout(),
            nn.Linear(4096, 1000),
            nn.Linear(1000, 10),
        )
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = x.view(-1, 7
  • 21
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值