zoukankan      html  css  js  c++  java
  • Tensorflow中的padding操作

    转载请注明出处:http://www.cnblogs.com/willnote/p/6746668.html

    图示说明

    padding操作图示

    • 用一个3x3的网格在一个28x28的图像上做切片并移动

    • 移动到边缘上的时候,如果不超出边缘,3x3的中心就到不了边界

    • 因此得到的内容就会缺乏边界的一圈像素点,只能得到26x26的结果

    • 而可以越过边界的情况下,就可以让3x3的中心到达边界的像素点

    • 超出部分的矩阵补零

    代码说明

    根据tensorflow中的conv2d函数,我们先定义几个基本符号

    • 输入矩阵 W×W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样,不多解释。

    • filter矩阵 F×F,卷积核

    • stride值 S,步长

    • 输出宽高为 new_height、new_width

    在Tensorflow中对padding定义了两种取值:VALID、SAME。下面分别就这两种定义进行解释说明。

    VALID

    new_height = new_width = (W – F + 1) / S  #结果向上取整
    
    • 含义:new_height为输出矩阵的高度
    • 说明:VALID方式不会在原有输入矩阵的基础上添加新的值,输出矩阵的大小直接按照公式计算即可

    SAME

    new_height = new_width = W / S    #结果向上取整
    
    • 含义:new_height为输出矩阵的高度
    • 说明:对W/S的结果向上取整得到W"包含"多少个S
    pad_needed_height = (new_height – 1)  × S + F - W
    
    • 含义:pad_needed_height为输入矩阵需要补充的高度
    • 说明:因为new_height是向上取整的结果,所以先-1得到W可以完全包裹住S的块数,之后乘以S得到这些块数的像素点总和,再加上filer的F并减去W,即得到在高度上需要对W补充多少个像素点才能满足new_height的需求
    pad_top = pad_needed_height / 2    #结果取整
    
    • 含义:pad_top为输入矩阵上方需要添加的高度
    • 说明:将上一步得到的pad_needed_height除以2作为矩阵上方需要扩充0的像素点数
    pad_bottom = pad_needed_height - pad_top
    
    • 含义:pad_bottom为输入矩阵下方需要添加的高度
    • 说明:pad_needed_height减去pad_top的剩余部分补充到矩阵下方

    以此类推,在宽度上需要pad的像素数和左右分别添加的像素数为

    pad_needed_width = (new_width – 1)  × S + F - W
    pad_left = pad_needed_width  / 2    #结果取整
    pad_right = pad_needed_width – pad_left
    

    源码示例

    tensorflow/python/ops/nn_ops.py中关于padding的源码部分

    padding源码部分

    参考

    1. Tensorflow中卷积的padding操作
    2. TensorFlow 深度学习笔记 卷积神经网络
    3. Tensorflow官方API padding说明
  • 相关阅读:
    球员岁月齐祖辉煌,执教生涯尤胜当年
    UVM序列篇之一:新手上路
    *2-3-7-加入field_automation机制
    2.3.6-加入scoreboard
    *2_3_5_加入reference model
    *2.3.4_封装成agent
    *2.3.3-加入monitor
    android的wake_lock介绍
    linux常用命令一些解释
    linux wc命令的作用。
  • 原文地址:https://www.cnblogs.com/willnote/p/6746668.html
Copyright © 2011-2022 走看看