MatConvnet--CNN wrappers

来源:互联网 发布:苹果悬浮时间软件 编辑:程序博客网 时间:2024/06/12 13:12

在其核心,MatConvNet包括实现CNN构建块的一些MATLAB函数。 这些通常通过使用两个CNN包装器之一组合成完整的CNN。 第一个包装器是SimpleNN,其中大部分由MATLAB函数vl_simplenn实现。 SimpleNN适用于具有线性拓扑的网络,即计算块链。 第二个包装器是DagNN,它实现为MATLAB类dagnn.DagNN。

SimpleNN包装器
SimpleNN包装器由函数vl_simplenn和其他几个函数实现。 这是一个轻量级的包装器,适合于CNN组成一个简单的块链。
要从Simple开始,创建一个网络结构,用层列表填充单元格数组net.layers。 例如:

net.layers{1} = struct(...    'name', 'conv1', ...    'type', 'conv', ...    'weights', {{randn(10,10,3,2,'single'), randn(2,1,'single')}}, ...    'pad', 0, ...    'stride', 1) ;net.layers{2} = struct(...    'name', 'relu1', ...    'type', 'relu') ;

现在卷积层和ReLU层将按顺序执行。 卷积具有两个10×10×3滤波器组。 评价可以如下获得:

data = randn(300, 500, 3, 5, 'single') ;res = vl_simplenn(net, data) ;

结构res包含计算结果,对于体系结构中的每个变量具有一个条目:

>> resres =1x3 struct array with fields:    x    dzdx    dzdw    aux    time    backwardTime

这里,x是变量值,dzdx是关于x的CNN的导数,dzdw是关于每个块参数的CNN的导数,用于定制信息的aux空间(例如,dropout层中的掩模)和时间, backwardTime在向前和向后通过中花费的时间。
例如,res(1).x是CNN的输入,res(3).x是其输出。
CNN的导数可以计算如下:

res = vl_simplenn(res, data, dzdy)

这既执行向前传递又执行向后传递。 dzdy是应用于CNN的输出值的投影(参见PDF手册以澄清这一点)。 在训练期间,CNN常常由计算单个标量损失值(即res(end).x是标量)的块终止。 在这种情况下,经常选择dzdy = 1。

0 0
原创粉丝点击