MatConvNet函数

通过Function index可以参看MatConvNet中的主要函数,其中
包含如下几大类:

  • 构成模块(Building Blocks):MatCovNet用于CNN计算的核心模块,用户可以对这些构成模块进行组合来构建CNN(或者使用MatConvNet提供的包装器,也就是SimpleNN包装器和DagNN包装器)
  • SimpleCNN包装器:轻量级的CNN网络包装器,主要将构成模块中的计算模块进行线性连接。
    • vl_simplenn:轻量级的线性拓扑结构的CNN包装器。
    • vl_simplenn_tidy:升级或者修复一个CNN
    • vl_simplenn_display:显示CNN的架构
    • vl_simplenn_move:将CNN在CPU或者GPU之间移动。
  • DagNN包装器:面向对象的可以支持更复杂网络结构的包装器。
  • 其他函数:一些工具函数
下面我们来看看vl_simplenn这个函数的几个用法:
RES = VL_SIMPLENN(NET, X)      %evaluates the convnet NET on data X
RES = VL_SIMPLENN(NET, X, DZDY)  % evaluates the convnent NET and its derivative on data X and output derivative DZDY (foward+bacwkard pass). 
RES = VL_SIMPLENN(NET, X, [], RES)  %evaluates the NET on X reusing the structure RES
RES = VL_SIMPLENN(NET, X, DZDY, RES) %evaluates the NET on X and its derivatives reusing the structure RES.
vl_simplenn函数的输入选项:
  • Mode
  • ConserveMemory
  • CuDNN
  • Accumulate
  • BackPropDepth
  • SkipForward
vl_simplenn函数的输出格式:

simplenn的结果返回至RES结构中,RES(1)包含网络的输入,RES(2), RES(3),...包含从开始到结束每一层的输出,其中每一层有含有如下的field

  • res(i+1).x: 为第i层网络的输出,因此,res(1).x 就是网络的输入,也就是输入数据。

  • res(i+1).dzdx: 第i层网络输出数据的导数.

  • res(i+1).aux: 第i层网络的附加信息,比如dropout使用的Mask信息。

  • res(i+1).dzdw: 第i层网络参数的导数。

我们看一个简单的例子:

res = vl_simplenn(net, inputs, dzdy, res, ...
        'mode','test', ...             %测试模式,进行forward and backward propagation
        'conserveMemory', false, ...   
        'backPropDepth', +inf, ...   %反向传播至网络第一层
        'cudnn', true) ;         %使用cudnn

其实vl_simplenn的代码就是将输入Net的层次用for循环展开,然后分别完成Forward pass和Backward pass,

你可能感兴趣的:(MatConvNet函数)