zoukankan      html  css  js  c++  java
  • CNN中的卷积操作的参数数计算

    之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积。比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8*8。实际核函数的参数量是3*3*channels,在本例子中就是3*3*3。

    举例:

    假设输入的tensor是3*10*10,定义一个大小为3*3的kernel,如果进行一个conv2d操作,输出的feature map是5的话,那么这个conv2d涉及的参数数是3*3*3*5+5=140个,输出大小5*8*8。其中3*3*3代表的是核参数,5代表的是bias数。

    验证代码:

    from keras.layers import Dense, Conv2D
    from keras.models import Sequential
    model = Sequential()
    conv1 = Conv2D(5, 3, input_shape=(3, 10, 10))
    model.add(conv1)
    print(model.summary())

    _________________________________________________________________

    Layer (type)                 Output Shape              Param #  

    =========================================================

    conv2d_1 (Conv2D)            (None, 5, 8, 8)           140      

    =========================================================

    Total params: 140

    Trainable params: 140

    Non-trainable params: 0

    _________________________________________________________________

     

    3D卷积意思是指在多个channel的volume上进行convolution操作。比如:5个4*10*10(深度、高度、宽度)大小的volume组成的高维数组。假设核大小为2*2*2,stride为1,输出feature map的数量为4,那么参数数为2*2*2*channels(5)*output feature maps(4)+4=164。输出大小为4*3*9*9。其中第一个4对应的是feature map数,第二个3对应的是深度,第三个9对应的是高度,第四个9对应的是宽度。

    验证代码:

    from keras.layers import Conv3D
    from keras.models import Sequential

    model = Sequential()
    conv1 = Conv3D(4, 2, input_shape=(5, 4, 10, 10))
    model.add(conv1)

    print(model.summary())

    _________________________________________________________________

    Layer (type)                 Output Shape              Param #  

    =========================================================

    conv3d_1 (Conv3D)            (None, 4, 3, 9, 9)        164      

    =========================================================

    Total params: 164

    Trainable params: 164

    Non-trainable params: 0

    _________________________________________________________________

  • 相关阅读:
    Android自定义Dialog效果
    Attempt to invoke virtual method 'void android.app.ActionBar.setTitle的解决方法
    Android 震动 和 停止 代码
    任意手机虚拟按键增加方法
    [vijos]1066弱弱的战壕<线段树>
    [bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>
    [bzoj]1053反质数<暴搜>
    [codevs]1250斐波那契数列<矩阵乘法&快速幂>
    [codevs2597]团伙<并查集>
    [noip模拟赛]虫洞holes<SPFA>
  • 原文地址:https://www.cnblogs.com/chuantingSDU/p/8120065.html
Copyright © 2011-2022 走看看