文档介绍:卷积神经网络全面解析之代码详解
本文介绍多层感知机算法,特别是详细解读其代码实现,基于python
theano,代码来自:ConvolutionalNeuralNetworks(LeNet)。
一、CNN卷积神经网络原理简介
要讲idth)
poolsize:(#rows,#cols)
"""
classLeNetConvPoolLayer(object):
def__init__(self,rng,input,filter_shape,image_shape,poolsize=(2,2)):
#assertcondition,condition为True,贝吆昧续往下执行,condition为False,中断程序
#image_shape[1]和filter_shape[1]者B是numinputfeaturemaps,它们必须
是一样的。
assertimage_shape[1]==filter_shape[1]
=input
#每个隐层神经元(即像素)与上一层的连接数为numinputfeaturemaps*
filterheight*filterwidth。
#[1:])来求得
fan_in=(filter_shape[1:])
#lowerlayer上每个神经元获得的梯度来自于:"numoutputfeaturemaps*
filterheight*filterwidth"/poolingsize
fan_out=(filter_shape[0]*(filter_shape[2:])/
(poolsize))
#以上求得fan_in、fan_out,将它们代入公式,以此来随机初始化W,W就是线
性卷积核
W_bound=(6./(fan_in+fan_out))
=(
(
(low=-W_bound,high=W_bound,size=filter_shape),
dtype=
),
borrow=True
)
thebiasisa1Dtensor--onebiasperoutputfeaturemap
偏置b是一维向量,每个输出图的特征图都对应一个偏置,
而输出的特征图的个数由filter个数决定,因此用filter_shape[0]即number
offilters来初始化
b_values=((filter_shape[0],),
dtype=)
=(value=b_values,borrow=True)
将输入图像与filter卷积,
卷积完没有加b再通过sigmoid,这里是一处简化。
conv_out=(
input=input,
filters=,
filter_shape=filter_shape,
image_shape=image_shape
)
#maxpooling,最大子采样过程
pooled_out=(
input=conv_out,
ds=poolsize,ignore_border=True)
加偏置,再通过tanh映射,得到卷积”采样层的最终输出
因为b是一维向量,这里用维度转换函数dimshuffle将其reshape0比如b是(10,),
('x',0,'x','x'))将其reshape为(1,10,1,1)
=(pooled_out+('x',0,'x','x'))
卷积+采样层的参数
=[,]
♦定义隐含层HiddenLayer
这个跟上一篇文章《DeepLearningtutorial(3)MLP多层感知机原理简
介+代码详解》中的HiddenLayer是一致的,直接拿过来:
"""
注释:
这是定义隐藏层的类,首先明确:隐藏层的输入即input,输出即隐藏层的神经
元个数。输入层与隐藏层是全连接的。
假设输入是n_in维的向量(也可以说时n_in个神经元),隐藏层有n_out个神经元,则因为是全连接,
一共有n_in*n_out