zoukankan      html  css  js  c++  java
  • 卷积神经网络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 > 用一个大卷积层

  • 相关阅读:
    addEventListener事件委托
    ES6的解构赋值
    JavaScript 中最​​重要的保留字
    HTML 5 Web 存储
    Node.js 里的 process.nextTick(),简单理解
    实现多层DIV叠加的js事件穿透
    touch事件中的touches、targetTouches和changedTouches详解
    Promise.all( ) 的使用
    js 中的五种迭代方法
    迭代
  • 原文地址:https://www.cnblogs.com/xbit/p/9563442.html
Copyright © 2011-2022 走看看