通過Function index可以參看MatConvNet中的主要函數(shù)礁蔗,其中
包含如下幾大類:
- 構(gòu)成模塊(Building Blocks):MatCovNet用于CNN計算的核心模塊,用戶可以對這些構(gòu)成模塊進行組合來構(gòu)建CNN(或者使用MatConvNet提供的包裝器挑豌,也就是SimpleNN包裝器和DagNN包裝器)
- SimpleCNN包裝器:輕量級的CNN網(wǎng)絡(luò)包裝器双肤,主要將構(gòu)成模塊中的計算模塊進行線性連接昔馋。
- vl_simplenn:輕量級的線性拓撲結(jié)構(gòu)的CNN包裝器五芝。
- vl_simplenn_tidy:升級或者修復(fù)一個CNN
- vl_simplenn_display:顯示CNN的架構(gòu)
- vl_simplenn_move:將CNN在CPU或者GPU之間移動趁猴。
- DagNN包裝器:面向?qū)ο蟮目梢灾С指鼜?fù)雜網(wǎng)絡(luò)結(jié)構(gòu)的包裝器刊咳。
- 其他函數(shù):一些工具函數(shù)
下面我們來看看vl_simplenn
這個函數(shù)的幾個用法:
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
函數(shù)的輸入選項:
- Mode
- ConserveMemory
- CuDNN
- Accumulate
- BackPropDepth
- SkipForward
vl_simplenn
函數(shù)的輸出格式:
simplenn
的結(jié)果返回至RES
結(jié)構(gòu)中儡司,RES(1)
包含網(wǎng)絡(luò)的輸入,RES(2), RES(3),...
包含從開始到結(jié)束每一層的輸出余指,其中每一層有含有如下的field
:
res(i+1).x: 為第
i
層網(wǎng)絡(luò)的輸出捕犬,因此,res(1).x 就是網(wǎng)絡(luò)的輸入酵镜,也就是輸入數(shù)據(jù)碉碉。res(i+1).dzdx: 第
i
層網(wǎng)絡(luò)輸出數(shù)據(jù)的導(dǎo)數(shù).res(i+1).aux: 第
i
層網(wǎng)絡(luò)的附加信息,比如dropout使用的Mask信息淮韭。res(i+1).dzdw: 第
i
層網(wǎng)絡(luò)參數(shù)的導(dǎo)數(shù)垢粮。
我們看一個簡單的例子:
res = vl_simplenn(net, inputs, dzdy, res, ...
'mode','test', ... %測試模式,進行forward and backward propagation
'conserveMemory', false, ...
'backPropDepth', +inf, ... %反向傳播至網(wǎng)絡(luò)第一層
'cudnn', true) ; 】糠唷%使用cudnn
其實vl_simplenn的代碼就是將輸入Net的層次用for
循環(huán)展開蜡吧,然后分別完成Forward pass和Backward pass毫蚓,