zoukankan      html  css  js  c++  java
  • TensorFlow中CNN的两种padding方式“SAME”和“VALID”

    来源

    dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它。
    整理一下,对于“VALID”,输出的形状计算如下:

    new_height=new_width=⌈(W–F+1)/S⌉

    对于“SAME”,输出的形状计算如下:
    new_height=new_width=⌈W/S⌉

    其中,W为输入的size,F为filter为size,S为步长,⌈⌉为向上取整符号

    总之,TensorFlow 使用如下等式计算 SAME 、PADDING

    SAME Padding, 输出的高和宽,计算如下:

    out_height = ceil(float(in_height) / float(strides1))

    out_width = ceil(float(in_width) / float(strides[2]))

    VALID Padding, 输出的高和宽,计算如下:

    out_height = ceil(float(in_height - filter_height + 1) / float(strides1))

    out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))

    维度

    综合目前所学的知识,我们应该如何计算 CNN 中每一层神经元的数量呢?
    
    输入层(input layer)维度值为W, 滤波器(filter)的维度值为 F (height * width * depth), stride 的数值为 S, padding 的数值为 P, 下一层的维度值可用如下公式表示: (W−F+2P)/S+1。
    
    我们可以通过每一层神经元的维度信息,得知模型的规模,并了解到我们设定的 filter size 和 stride 如何影响整个神经网络的尺寸。
    

    正解

    H = height, W = width, D = depth

    我们有一个输入维度是 32x32x3 (HxWxD)
    20个维度为 8x8x3 (HxWxD) 的滤波器
    高和宽的stride(步长)都为 2。(S)
    padding 大小为1 (P)
    计算新的高度和宽度的公式是:

    new_height = (input_height - filter_height + 2 * P)/S + 1
    new_width = (input_width - filter_width + 2 * P)/S + 1

    输出的维度(shape)是什么?
    (32-8+2*1)/2+1=14
    滤波器的个数20就是新的深度

  • 相关阅读:
    BZOJ 2069 POI2004 ZAW 堆优化Dijkstra
    浏览器大小屏适配的方法
    编译性语言&解释性语言
    ubuntu 查看网卡 数据包处理 速度
    使用Newtonsoft JsonConvert反序列化Json数据到DataTable
    easyUI datagrid view扩展
    easyUI layout 中使用tabs+iframe解决请求两次方法
    oracle自定义判断数据是否为数值函数
    easyUI datagrid editor扩展dialog
    JavaScript格式化日期
  • 原文地址:https://www.cnblogs.com/james0/p/8467498.html
Copyright © 2011-2022 走看看