MatConvnet--CNN wrappers

在其核心,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包含计算结果,对于体系结构中的每个变量具有一个条目:

>> res
res =
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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值