深度学习算法实践11---卷积神经网络(CNN)之卷积操作

原创 2016年08月29日 18:20:48

卷积神经网络(CNN)主要特性有:稀疏连接和权值共享、卷积操作、池化。在前一篇博文中我们已经讨论了稀疏连接和权值共享,在本篇博文中,我们将介绍卷积操作和池化。正是由于对图像进行卷积操作,卷积神经网络才得以其名,可见卷积操作是其核心。在这篇博文中,我们将讨论卷积操作的实现其及物理含义。

首先,我们来了解一下卷积概念。对于一维信号,卷积定义为:

式1

而我们要处理的图像信号,是二维信号,卷积定义为:

式2

我们假设输入层以3*3为接收域,则其上层特征图也应该是3*3。

如下图所示,我们想要求出上一层第k个特征图(3*3),对其中每个节点i,j的值可以用如下公式求出:


 式3

在上图中,我们需要求出上一层第0个特征图(0,0)点处神经元的输出值,则可知上式的k=0, i=0, j=0,具体列出式子为:

 式4

由上图可知,这里的卷积就是将权值矩阵与图像进行卷积操作,将结果加上上一层对应位置神经元的Bias后再进行一个非线性变换,这里用的是双曲正切函数,即可求出上一层特征图对应位置的神经元输出。

下面来求下一层中第0个特征图中(0,1)位置的神经元输出,如下图所示:


代入式3的公式,可以得出如下的

 式5

有了上述的理论基础,让我们看一下,我们对一个原始图像做卷积操作会出现什么结果,在下面的程序中,我们定义图像输入层有3个特征图,上一层有2个特征图,特征图的尺寸为9*9,我们将做完卷积操作后的图像和之前的图像一并显示出来:

import theano
from theano import tensor as T
from theano.tensor.nnet import conv2d
import numpy
from matplotlib import pylab
from PIL import Image

def conv_wky():
    rng = numpy.random.RandomState(23455)
    input = T.tensor4(name='input')
    w_shp = (2, 3, 9, 9)
    w_bound = numpy.sqrt(3 * 9 * 9)
    W = theano.shared( numpy.asarray(
                rng.uniform(
                    low=-1.0 / w_bound,
                    high=1.0 / w_bound,
                    size=w_shp),
                dtype=input.dtype), name ='W')
    b_shp = (2,)
    b = theano.shared(numpy.asarray(
                rng.uniform(low=-.5, high=.5, size=b_shp),
                dtype=input.dtype), name ='b')
    conv_out = conv2d(input, W)
    output = T.nnet.sigmoid(conv_out + b.dimshuffle('x', 0, 'x', 'x'))
    return theano.function([input], output)

def do_conv():
    f = conv_wky()
    img = Image.open(open('3wolfmoon.jpg', 'rb'))
    img = numpy.asarray(img, dtype='float64') / 256.
    img_ = img.transpose(2, 0, 1).reshape(1, 3, 639, 516)
    filtered_img = f(img_)
    pylab.subplot(1, 3, 1); pylab.axis('off'); pylab.imshow(img)
    pylab.gray()
    pylab.subplot(1, 3, 2); pylab.axis('off'); pylab.imshow(filtered_img[0, 0, :, :])
    pylab.subplot(1, 3, 3); pylab.axis('off'); pylab.imshow(filtered_img[0, 1, :, :])
    pylab.show()

if __name__ == '__main__':
    do_conv()
结果如下所示:


如图所示,可以看出,对于图像进行一次卷积操作,相当于识别出了图像的边缘,我们知道,识别边缘是图像处理的基础操作,因此可以看出卷积操作是有其物理含义的。

我们知道怎么定义卷积操作之后,我们就可以开始实现卷积神经网络(CNN)了。在下一篇博文,我们将讨论怎样使用卷积神经网络(CNN)将MNIST手写数字识别的错误率降低到1%以内,这甚至超过了人类的识别率,足以看到卷积神经网络的巨大威力。


卷积神经网络

深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。 第二篇,讲讲经典的卷积神经网络。我不打...

深入理解卷积神经网络(卷积篇)(Convolutional Neural Networks, CNNs)

概述卷积神经网络,也称为卷积网络,简称CNN,是神经网络的一种。其可用于一维时间序列的处理,也可以用于二维(如图像)序列的处理。目前,卷积神经网络可以说是应用最为广泛、效果最为出众的方法之一。相比于普...

【深度学习】卷积神经网络(Convolutional Neural Networks)

动机 - (Motivation) 卷积神经网络(CNN)是多层前向网络(MLPs)的一种变体,而MLP是受生物学的启发发展而来的。从Hubel和Wiesel对猫的视觉皮层(visual contex...

深度学习笔记五:卷积神经网络CNN(基本理论)

卷积神经网络基本理论

Google 深度学习笔记 卷积神经网络

google 深度学习笔记 卷积神经网络

CNN中的卷积操作

cnn卷积操作详解

CNN卷积神经网络学习笔记3:权值更新公式推导

在上篇《CNN卷积神经网络学习笔记2:网络结构》中,已经介绍了CNN的网络结构的详细构成,我们已经可以初始化一个自己的CNN网络了,接下来就是要用训练得到一个确定的CNN的模型,也就是确定CNN的参数...

Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现zouxy09@qq.comhttp://blog.csdn.net/zouxy09          自己平时看了一些论文,但老...
  • zouxy09
  • zouxy09
  • 2013年08月16日 00:40
  • 362309

再看CNN中的卷积

这两天在看CS231n的课程笔记,结合着原版英文和知乎上中文版翻译在看,确实Andrej Karpathy写的很棒,很多都是些实践经验不仅仅是理论知识. 我结合着自己的理解和Karpathy的介绍,重...

详细解释CNN卷积神经网络各层的参数和链接个数的计算

卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。        图:卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图...
  • dcxhun3
  • dcxhun3
  • 2015年07月14日 15:44
  • 38212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习算法实践11---卷积神经网络(CNN)之卷积操作
举报原因:
原因补充:

(最多只允许输入30个字)