zoukankan      html  css  js  c++  java
  • 卷积核


    以一张图片作为开始吧:




    这里的输入数据是大小为(8×8)的彩色图片,其中每一个都称之为一个feature map,这里共有3个。所以如果是灰度图,则只有一个feature map。


    进行卷积操作时,需要指定卷积核的大小,图中卷积核的大小为3,多出来的一维3不需要在代码中指定,它会自动扩充至图片的channel数。这里一共定义了5个卷积核,进行卷积操作后,得到了5个feature map。 需要注意的是,**feature map的数量就等于卷积核的数量**。

    卷积层尺寸的计算原理
    输入矩阵格式:四个维度,依次为:样本数、图像高度、图像宽度、图像通道数
    输出矩阵格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像高度、图像宽度、图像通道数)的尺寸发生变化。
    权重矩阵(卷积核)格式:同样是四个维度,但维度的含义与上面两者都不同,为:卷积核高度、卷积核宽度、输入通道数、输出通道数(卷积核个数)
    输入矩阵、权重矩阵、输出矩阵这三者之间的相互决定关系
    卷积核的输入通道数(in depth)由输入矩阵的通道数所决定。
    输出矩阵的通道数(out depth)由卷积核的输出通道数所决定。
    输出矩阵的高度和宽度(height, width)这两个维度的尺寸由输入矩阵、卷积核、扫描方式所共同决定。计算公式如下。
    (height_{out} = (height_{in} - height_{kernel} + 2*padding) / stride + 1)
    (width_{out} = (width_{in} - width_{kernel} + 2*padding) / stride + 1)




    下面这张图展示了卷积操作具体是如何计算的:




    这里用到的就是Conv2D,事实上还有Conv1D,Conv3D。这里再介绍一下Conv1D。

    Conv1D是专门针对序列信息的,上面的输入为seq_len=3,dim=3,卷积核的大小为2,由于词向量维度为3,所以卷积核会自动扩充到3维,这和上面自动等于通道个数是相似的。


    举个栗子:

    这里定义了两个Conv1D,卷积核的大小分别设为5和3,随机生成input,代表的意义分别为【batch,seq_len,dim】。
    运行的结果:



    特别值得注意的是,1*1的卷积核可以用来代替全连接层来使用。它的好处有很多,可以参考:一文读懂卷积神经网络中的1x1卷积核
    要求是卷积核的个数等于全连接层的神经元个数
    每一个卷积核都可以生成一个feature map,但是在全连接层中就变成了一个值,破坏了空间信息,卷积核的话可以保留空间信息。同时可以简化参数,因为卷积核是权重共享的。





    参考:
    【1】CNN中卷积层的计算细节
    【2】一维卷积tensorflow2版本的Conv1D以及Pytroch的nn.Conv1d用法
    【3】一文读懂卷积神经网络中的1x1卷积核

  • 相关阅读:
    辗转相除法求最大公约数
    洛谷——P2615 神奇的幻方 【Noip2015 day1t1】
    二分图的一大泼基础题
    HDU——T 1150 Machine Schedule
    HDU——T 1068 Girls and Boys
    POJ——T 3020 Antenna Placement
    Web框架Django(二)
    February 25 2017 Week 8 Saturday
    February 24 2017 Week 8 Friday
    February 23 2017 Week 8 Thursday
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/14076973.html
Copyright © 2011-2022 走看看