zoukankan      html  css  js  c++  java
  • Inception模型和Residual模型卷积操作的keras实现

         Inception模型和Residual残差模型是卷积神经网络中对卷积升级的两个操作。

    一、  Inception模型(by google)

         这个模型的trick是将大卷积核变成小卷积核,将多个卷积核的运算结果进行连接,充分利用多尺度信息,这也体现了这篇文章的标题

        Going Deeper with Convolutions。更加深的卷积操作。

         废话不多说,上图

          注意输入层在底部,输出层在顶部。废话不多说,上keras代码。

     1 from keras.layers import Conv2D, MaxPooling2D, Input
     2 
     3 input_img = Input(shape=(256, 256, 3))
     4 
     5 tower_1 = Conv2D(64, (1, 1), padding='same', activation='relu')(input_img)
     6 tower_1 = Conv2D(64, (3, 3), padding='same', activation='relu')(tower_1)
     7 
     8 tower_2 = Conv2D(64, (1, 1), padding='same', activation='relu')(input_img)
     9 tower_2 = Conv2D(64, (5, 5), padding='same', activation='relu')(tower_2)
    10 
    11 tower_3 = MaxPooling2D((3, 3), strides=(1, 1), padding='same')(input_img)
    12 tower_3 = Conv2D(64, (1, 1), padding='same', activation='relu')(tower_3)
    13 
    14 output = keras.layers.concatenate([tower_1, tower_2, tower_3], axis=1)
    最后的concatenate是核心,其实就是连接在一起,比如两列向量和两列向量,连接成四列向量即可。

    二、  Residual模型(by microsoft)

    这个模型的trick是将进行了一种跨连接操作,将特征跨过一定的操作后在后面进行求和。这个意义一个是减轻梯度消失,
    还有个目的其实让后续的卷积结果变得越来越强。DenseNet 其实也是这种思想。

    废话不多说,上图

             

              从上图看,输出的结果就是X+F(X) 直接相加,逐个元素对应相加,而不是连接。F(X) 是什么呢? 看下图

             

              F(X)实际上就是一个或者多个卷积操作,非常简单直观。废话不多说,上keras代码。下面代码只演示了一个卷积操作。

    1 from keras.layers import Conv2D, Input
    2 
    3 # input tensor for a 3-channel 256x256 image
    4 x = Input(shape=(256, 256, 3))
    5 # 3x3 conv with 3 output channels (same as input channels)
    6 y = Conv2D(3, (3, 3), padding='same')(x)
    7 # this returns x + y.
    8 z = keras.layers.add([x, y])

             以上,就是现在目前最最有效的两种卷积升级操作的keras实现。

    参考文献:

          Keras文档

        

  • 相关阅读:
    WIN32弹窗报时间【CSDN】
    函数返回类型为引用的好处
    计算机补码的秘密【转】
    设计模式之Singleton模式【类只有一个对象】
    bitwise constness与logical constness【EC++笔记】
    避免使用隐式类型转换【转】
    private, public, protected,继承【转】
    nonlocal static对象初始化【EC++笔记】
    在资源管理类中提供对原始资源的访问【EC++笔记】
    copy构造函数与copy赋值操作符【EC++笔记】
  • 原文地址:https://www.cnblogs.com/love6tao/p/8532661.html
Copyright © 2011-2022 走看看