• 卷积神经网络CNN


    卷积神经网络组成:  INPUT -> CONV -> ReLU -> POOL -> FC

    卷积操作:

    • 输入大小为:W1 x H1 x D1
    • 指定的超参数:filter个数(K),filter大小(F),步长(S),边界填充(P)

    输出:

    • W2 = (W1 - F + 2P)/S + 1
    • H2 = (H1 - F + 2P)/S + 1
    • D2 = K

    Input: rows * rows *  channels, N filter_rows*filter_rows filters with stride=stride, pade=pad

    Output:  output_rows = (rows+2*pad-filter_rows)/stride + 1

    MAX POOLING更常用,AVE POOLING用得少了

    反向传播:

    对于CONV,其每一层正向传播:out = x * w + b,

    其中:

    • out.size == [depth_out, out_height, out_width)
    • w.size == [depth_out, depth_x, filter_height, filter_width]
    • x.size == [sample, depth_x, height, width]
    • b.size == [depth_out]

    则对应的反向传播计算:

    dw[k_depth_out, k_depth_x, :, :] =
    sum {
    x[k_sample, k_depth_x,
    (k_height
    +stride*k_out_height):(k_height+stride*k_out_height+stride),
    (k_width +stride*k_out_width ):(k_width +stride*k_out_width +stride)] * dout[k_depth_out, k_out_height, k_out_width] * STEP }

    ???   dout = x * dw => dw = dout/x   ???

    因为CNN并不是假设dout均匀分配给各个x[k],而是假设x[k]越大,特征越显著,对应的w[k]贡献就越大,此时修改对应的w[k],效果也越显著

    关于POOL操作

    对于均值POOL,反向传播平均分配给前一级网络。

    对于MAX POOL,只返回到最大位置

    如何巧妙设计网络结构

    设:R为filter半径,N为out put depth

    用小半径,多层处理,参数个数 = (2*R+1) * N = 2*R*N + N

    用一个卷积层,参数个数 = (2*R*N+1)^2 = 4*R^2*N^2 + 4*R*N + 1

    明显参数个数, 分多层小filter << 用一个大卷积层

    但根据计算,predict的运算量,分多层小filter > 用一个大卷积层

    非线性程度,运算量分多层小filter > 用一个大卷积层

  • 相关阅读:
    深入理解CSS中的层叠上下文和层叠顺序
    利用CSS3制作淡入淡出动画效果
    <link>标签的rel属性全解析
    解决<pre>标签里的文本换行(兼容IE, FF和Opera等)
    HTML特殊字符大全
    清除浮动4种方法总结下
    打开wamp中的phpmyadmin出现403的错误
    js访问CSS最终计算样式
    js 正则 exec() 和 match() 数据抽取
    函数表达式中,函数名称在函数体内是只读的
  • 原文地址:https://www.cnblogs.com/xbit/p/9563442.html
Copyright © 2020-2023  润新知