CNN卷积神经网络原理Word文档格式.docx
- 文档编号:14598622
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:23
- 大小:29.81KB
CNN卷积神经网络原理Word文档格式.docx
《CNN卷积神经网络原理Word文档格式.docx》由会员分享,可在线阅读,更多相关《CNN卷积神经网络原理Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
当确定好了结构以后,如何求解层与层之间的连接参数一般采用向前传播(FP)+向后传播(BP)的方法来训练。
具体可参考上面给出的链接。
二、CNN卷积神经网络代码详细解读(基于python+theano)
代码来自于深度学习教程:
,这个代码实现的是一个简化了的LeNet5,具体如下:
∙没有实现location-specificgainandbiasparameters
∙用的是maxpooling,而不是average_pooling
∙分类器用的是softmax,LeNet5用的是rbf
∙LeNet5第二层并不是全连接的,本程序实现的是全连接
另外,代码里将卷积层和子采用层合在一起,定义为“LeNetConvPoolLayer“(卷积采样层),这好理解,因为它们总是成对出现。
但是有个地方需要注意,代码中将卷积后的输出直接作为子采样层的输入,而没有加偏置b再通过sigmoid函数进行映射,即没有了下图中fx后面的bx以及sigmoid映射,也即直接由fx得到Cx。
最后,代码中第一个卷积层用的卷积核有20个,第二个卷积层用50个,而不是上面那张LeNet5图中所示的6个和16个。
了解了这些,下面看代码:
(1)导入必要的模块
[python]
1.importcPickle
2.importgzip
3.importos
4.importsys
5.importtime
6.importnumpy
7.importtheano
8.importasT
9.fromimportdownsample
10.fromimportconv
(2)定义CNN的基本"
构件"
CNN的基本构件包括卷积采样层、隐含层、分类器,如下
∙定义LeNetConvPoolLayer(卷积+采样层)
见代码注释:
1."
"
2.卷积+下采样合成一个层LeNetConvPoolLayer
3.rng:
随机数生成器,用于初始化W
4.filter_shape:
(numberoffilters,numinputfeaturemaps,filterheight,filterwidth)
5.image_shape:
(batchsize,numinputfeaturemaps,imageheight,imagewidth)
6.poolsize:
(#rows,#cols)
7."
8.classLeNetConvPoolLayer(object):
9.def__init__(self,rng,input,filter_shape,image_shape,poolsize=(2,2)):
10.#assertcondition,condition为True,则继续往下执行,condition为False,中断程序
11.#image_shape[1]和filter_shape[1]都是numinputfeaturemaps,它们必须是一样的。
12.assertimage_shape[1]==filter_shape[1]
13.=input
14.#每个隐层神经元(即像素)与上一层的连接数为numinputfeaturemaps*filterheight*filterwidth。
15.#可以用(filter_shape[1:
])来求得
16.fan_in=(filter_shape[1:
])
17.#lowerlayer上每个神经元获得的梯度来自于:
numoutputfeaturemaps*filterheight*filterwidth"
/poolingsize
18.fan_out=(filter_shape[0]*(filter_shape[2:
])/
19.(poolsize))
20.#以上求得fan_in、fan_out,将它们代入公式,以此来随机初始化W,W就是线性卷积核
21.W_bound=(6./(fan_in+fan_out))
22.=(
23.(
24.(low=-W_bound,high=W_bound,size=filter_shape),
25.),
26.borrow=True
27.)
28.#thebiasisa1Dtensor--onebiasperoutputfeaturemap
29.#偏置b是一维向量,每个输出图的特征图都对应一个偏置,
30.#而输出的特征图的个数由filter个数决定,因此用filter_shape[0]即numberoffilters来初始化
31.b_values=((filter_shape[0
32.=(value=b_values,borrow=True)
33.#将输入图像与filter卷积,函数
34.#卷积完没有加b再通过sigmoid,这里是一处简化。
35.conv_out=(
36.input=input,
37.filters=,
38.filter_shape=filter_shape,
39.image_shape=image_shape
40.)
41.#maxpooling,最大子采样过程
42.pooled_out=(
43.input=conv_out,
44.ds=poolsize,
45.ignore_border=True
46.)
47.#加偏置,再通过tanh映射,得到卷积+子采样层的最终输出
48.#因为b是一维向量,这里用维度转换函数dimshuffle将其reshape。
比如b是(10,),
49.#则('
x'
0,'
'
))将其reshape为(1,10,1,1)
50.=(pooled_out+'
))
51.#卷积+采样层的参数
52.=[,]
∙定义隐含层HiddenLayer
这个跟上一篇文章《》中的HiddenLayer是一致的,直接拿过来:
2.注释:
3.这是定义隐藏层的类,首先明确:
隐藏层的输入即input,输出即隐藏层的神经元个数。
输入层与隐藏层是全连接的。
4.假设输入是n_in维的向量(也可以说时n_in个神经元),隐藏层有n_out个神经元,则因为是全连接,
5.一共有n_in*n_out个权重,故W大小时(n_in,n_out),n_in行n_out列,每一列对应隐藏层的每一个神经元的连接权重。
6.b是偏置,隐藏层有n_out个神经元,故b时n_out维向量。
7.input训练模型所用到的所有输入,并不是MLP的输入层,MLP的输入层的神经元个数时n_in,而这里的参数input大小是(n_example,n_in),每一行一个样本,即每一行作为MLP的输入层。
8.activation:
激活函数,这里定义为函数tanh
9."
10.classHiddenLayer(object):
11.def__init__(self,rng,input,n_in,n_out,W=None,b=None,
12.activation=:
13.=input#类HiddenLayer的input即所传递进来的input
14."
15.注释:
16.另外,W的初始化有个规则:
如果使用tanh函数,则在-sqrt(6./(n_in+n_hidden))到sqrt(6./(n_in+n_hidden))之间均匀
17.抽取数值来初始化W,若时sigmoid函数,则以上再乘4倍。
18."
19.#如果W未初始化,则根据上述方法初始化。
20.#加入这个判断的原因是:
有时候我们可以用训练好的参数来初始化W,见我的上一篇文章。
21.ifWisNone:
22.W_values=(
24.low=(6./(n_in+n_out)),
25.high=(6./(n_in+n_out)),
26.size=(n_in,n_out)
27.),
28.)
29.if
30.W_values*=4
31.W=(value=W_values,name='
W'
borrow=True)
32.ifbisNone:
33.b=(value=b_values,name='
b'
34.#用上面定义的W、b来初始化类HiddenLayer的W、b
35.=W
36.=b
37.#隐含层的输出
38.lin_output=(input,+
39.=(
40.lin_outputifactivationisNone
41.elseactivation(lin_output)
42.)
43.#隐含层的参数
44.=[,]
∙定义分类器(Softmax回归)
采用Softmax,这跟《》中的LogisticRegression是一样的,直接拿过来:
2.定义分类层LogisticRegression,也即Softmax回归
3.在deeplearningtutorial中,直接将LogisticRegression视为Softmax,
4.而我们所认识的二类别的逻辑回归就是当n_out=2时的LogisticRegression
5."
6.#参数说明:
7.#input,大小就是(n_example,n_in),其中n_example是一个batch的大小,
8.#因为我们训练时用的是MinibatchSGD,因此input这样定义
9.#n_in,即上一层(隐含层)的输出
10.#n_out,输出的类别数
11.classLogisticRegression(object):
12.def__init__(self,input,n_in,n_out):
13.#W大小是n_in行n_out列,b为n_out维向量。
即:
每个输出对应W的一列以及b的一个元素。
14.=(
15.value=(
16.(n_in,n_out),
17.),
18.name='
19.borrow=True
20.)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CNN 卷积 神经网络 原理