专栏首页CSDN博客百度机器学习训练营笔记——问题回答

百度机器学习训练营笔记——问题回答

原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历

说明

这个是使用PaddlePaddle训练cifar10数据集的一个例子

问题1:网络结构

问题:计算每层网络结构和输入输出尺寸和参数个数。不加BN?更深?每层的尺寸变化?更多结构?

def convolutional_neural_network(img):
    print('输入层的shape:', img.shape)
    conv_pool_1 = fluid.nets.simple_img_conv_pool(
        input=img,
        filter_size=5,
        num_filters=20,
        pool_size=2,
        pool_stride=2,
        act="relu")
    print('第一层卷积池化层输出shape:', conv_pool_1.shape)
    conv_pool_1 = fluid.layers.batch_norm(conv_pool_1)
    conv_pool_2 = fluid.nets.simple_img_conv_pool(
        input=conv_pool_1,
        filter_size=5,
        num_filters=50,
        pool_size=2,
        pool_stride=2,
        act="relu")
    print('第二层卷积池化层输出shape:', conv_pool_2.shape)
    conv_pool_2 = fluid.layers.batch_norm(conv_pool_2)
    conv_pool_3 = fluid.nets.simple_img_conv_pool(
        input=conv_pool_2,
        filter_size=5,
        num_filters=50,
        pool_size=2,
        pool_stride=2,
        act="relu")
    print('第三层卷积池化层输出shape:', conv_pool_3.shape)
    prediction = fluid.layers.fc(input=conv_pool_3, size=10, act='softmax')
    print('全连接层输出shape:', prediction.shape)
    return prediction

答1: 本网络的的输入数据的shape为(128, 3, 32, 32),所以输出如下:

  • 第一层的卷积层输出shape:(128, 20, 28, 28),参数大小为:20∗3∗5∗5=150020*3*5*5=150020∗3∗5∗5=1500
  • 第一层的池化层输出shape:(128, 20, 14, 14)
  • 第二层的卷积层输出shape:(128, 50, 10, 10),参数大小为:50∗20∗5∗5=2500050*20*5*5=2500050∗20∗5∗5=25000
  • 第二层的池化层输出shape:(128, 50, 5, 5)
  • 第三层的卷积层输出shape:(128, 50, 1, 1),参数大小为:50∗50∗5∗5=6250050*50*5*5=6250050∗50∗5∗5=62500
  • 第三层的池化层输出shape:(128, 50, 1, 1)
  • 最后的全连接层输出shape:(128, 10),参数大小为:50∗10=50050*10=50050∗10=500
  • 总参数大小:1500+25000+62500+500=895001500+25000+62500+500=895001500+25000+62500+500=89500

PaddlePaddle的网络输出

输入层的shape: (-1, 3, 32, 32)
第一层卷积池化层输出shape: (-1, 20, 14, 14)
第二层卷积池化层输出shape: (-1, 50, 5, 5)
第三层卷积池化层输出shape: (-1, 50, 1, 1)
全连接层输出shape: (-1, 10)

答2: 在没有使用BN层之前:

  • 参数的更新,使得每层的输入输出分布发生变化,称作ICS(Internal Covariate Shift)
  • 差异hui会随着网络深度增大而增大
  • 需要更小的学习率和较好的参数进行初始化

加入了BN层之后:

  • 可以使用较大的学习率
  • 可以减少对参数初始化的依赖
  • 可以拟制梯度的弥散
  • 可以起到正则化的作用
  • 可以加速模型收敛速度

用BN层的训练情况:

不使用BN层的训练情况:

从图中可以看出使用BN层的准确率更高,训练过程中损失值和准确率的幅度更加小。

答3: 因为该网络的第三层卷积池化层输出的宽和高都是1,所以不能再增加卷积池化层,如果再使用卷积池化层,就会报以下的错误。

EnforceNotMet: Due to the settings of padding(0), filter_size(5), dilation(1) and stride(1), the output size is less than 0, please check again. Input_size:1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 构建深度神经网络实现猫的二分类

    这里导入了两个工具类,可以从这里下载,这里包含了这个函数和用到的数据集,其中用到了h5py,如果读者没有安装的话,要先用pip安装这个库,还有以下用到的库也要安...

    夜雨飘零
  • Android开机启动

    要开机启动,首先肯定是想到广播,广播接收器接收到开机发出的广播,就执行onReceive(),在onReceive()可以写一些我们需要做的操作

    夜雨飘零
  • 《我的PaddlePaddle学习之路》笔记一——PaddlePaddle的安装

    PaddlePaddle目前还不支持Windows,如果读者直接在Windows上安装PaddlePaddlePaddle的话,就会提示没有找到该安装包。如果读...

    夜雨飘零
  • 如何解决push commit conflict

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    Jerry Wang
  • 3个方面:做好竞品数据分析!

    在日常工作中,产品经理们做了很多功能,可能到最后这些功能并没有多少人使用;运营们开展了各种推广活动,但却没有起到什么效果。

    1480
  • 快速学习Git-Git的安装

    最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在L...

    cwl_java
  • jaeger坑之java.lang.NoSuchMethodError: io.jaegertracing.agent.thrift.Agent$Client.sendBaseOneway

    在jaeger使用过程中遇到了一个奇怪的问题,本来jaeger运行的好好的,jaeger配置与依赖都没动,就上了一个版本,结果jaeger就没上报监控数据了,由...

    一笠风雨任生平
  • Android内存分配/回收的一个问题-为什么内存使用很少的时候也GC

    Android应用建立在Java虚拟机之上的,Google为了保证同时多个APP运行并及时唤醒,就为每个虚拟机设置了最大可使用内存,通过adb命令可以查看相应的...

    看书的小蜗牛
  • Windows Python2.7配置OpenCV3.2

    官网给出的OpenCV3.2最高支持到Python2.7版本,如果想用2.7版配置OpenCV的,可以参考一下内容。配置起来还是非常简单的,下面给出需要的下载地...

    chaibubble
  • 数据中台

    数据模型是分层次的,以前叫作数据仓库模型,概括为三层,基础模型一般是关系建模,主要实现数据的标准化,我们叫作“书同文、车同轨”,融合模型一般是维度建模,主要实现...

    只喝牛奶的杀手

扫码关注云+社区

领取腾讯云代金券