• tf.nn的conv2d卷积与max_pool池化


    tf.nn.conv2d(value,filter,strides,[...])

    对于图片来说   

    value :   形状通常是np.array()类型的4维数组也称tensor(张量),  (batch,height,width,channels) 可以理解为(图片样本的个数,高,宽,图片的颜色通道数)

    value是待卷积的数据

    filter: 卷积核 -4元素元组【height,width,in_channels,out_channels】,前面的3个参数和value的后面3个参数一一对应。但是out_channels不太确定,卷积核的个数,

        如果对一个shape 为[64,40,120,32]的数据进行卷积 filter=【3,3,32,64】,padding='same',strides=[1, 1, 1, 1] ,shape就变为了[64,40,120,64].

        [3,3,32]与[40,120,32]进行对应,32=32,则相当于 【3,3】对【40,120】,卷积时以【3*3】的扫描面积在【40,120】上进行扫描,每扫描一次,在结果集上产生一个【1,1】的数据单位

                   起始位置为【40,120】上面的最前面【3,3】的部分,

                   移动步调大小为【1,1,1,1】,即上下左右每次移动都只能移动1个单位,每次只能向一个方向移动,

                   same表示结束位置为 卷积核与源数据重叠,只需移动一个单位则不再重叠。

        所以,对于【40,120,32】经过【3,3,32】的扫描后变成【40,120,1】,64表示经过了64次这样的扫描,于成了【40,120,64】


    padding: 扫描时对边角面积的处理模式 。SAME表示    扫描的的时候,对于源矩阵中 不足卷积核大小的 面积 仍进行扫描 ,直到卷积核的左边缘与源矩阵右边缘不相交为止。卷积核与源矩阵没有任何重叠部分 的扫描 不在结果集上产生数据单位。     VALID 表示,扫描时,对于源矩阵中 不足卷积核大小的 面积舍弃,不再扫描。

     


    tf.nn.max_pool(value,ksize,strides)池化与卷积的过程原理基本一样,

    ksize池化窗【batch,height,width,channels】,
    只是卷积改变的是height,width,channels,池化通常改变的是height,width 。
    conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') #[64,20,60,32] 

    对于[64,20,60,32] 的矩阵进行池化,卷积核【2,2】,步长【2,2】表示卷积核的面积为2*2,每次扫描时移动的步调大小是2个单位,如果对于一个4*4的矩阵,进行这个种扫描,

    扫描四次(2*2)即可扫描完成。如果是5*5的矩阵,不足卷积核的模式为same,则需扫描9次(3*3),valid模式4次(2*2)。

    所以,【64,20,60,32】的矩阵池化后shape则变为 【64,10,30,32】。

  • 相关阅读:
    PHP实现同array_column一样的功能
    PHP使用FTP上传文件到服务器(实战篇)
    PHP计算今天、昨天、本周、本月、上月开始时间和结束时间
    PHP计算两个日期相差的年月日时分秒
    mysql命令行复制数据库
    Mysql中反引号和单引号的区别
    Linux 使用 selenium 环境配置
    SVN 提交文件报错:svn: E155015: Aborting commit:
    Django:Nginx 启动,无法加载样式,无法加载静态文件
    Django:Could not find backend 'django_redis.cache.RedisCache': cannot import name 'six'
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9255216.html
Copyright © 2020-2023  润新知