DAGNN:有向无环图神经网络
生活随笔
收集整理的這篇文章主要介紹了
DAGNN:有向无环图神经网络
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.綜述:
DagNN是用來代替SimpleNN的CNN wrapper。它是面向?qū)ο蟮?#xff0c;并且允許采用有向無環(huán)圖構(gòu)建神經(jīng)網(wǎng)絡。與SimpleNN相比,DagNN速度有點慢但是更加靈活。
一個DAG對象包括以下數(shù)據(jù)成員:
-
layers: 神經(jīng)網(wǎng)絡層
-
vars: 網(wǎng)絡變量
-
params: 網(wǎng)絡參數(shù)
-
meta: 額外的補充信息
同時,DAG還包括有一些臨時的數(shù)據(jù)成員:
- mode [normal] : 這個標志可以是“normal”或者“test”。在后面一種情況,某些模塊轉(zhuǎn)向測試模式,適合驗證和評估;
- accumulateParamDer [false]?: 如果設置為“true”,那么網(wǎng)絡參數(shù)的導數(shù)就會被累計,而不是在下次計算時重寫;
- conserveMemory [true] : 如果這個標記位設置為“true”,DagNN將會丟棄中間變量值,一旦在計算過程中不再需要它們;
- device [cpu] : 這個標志的意思是,DagNN駐留在CPU內(nèi)存中或者GPU內(nèi)存中,使用 DagNN.move()可以在設備之間移動DagNN。
2. DAGNN相關函數(shù)
2.1 初始化為空
obj = DagNN() %初始化為空的DAGNN結(jié)構(gòu)體2.2 ?獲取網(wǎng)絡輸入變量的名字
inputName = getInputs(obj) % 獲取網(wǎng)絡輸入的名字返回一個cell類型的輸入組合。
2.3 獲取網(wǎng)絡輸出變量的名字
outputName = getOutputs(obj); % 獲取網(wǎng)絡輸出名稱2.4 獲取網(wǎng)絡層索引
index = getLayerIndex(obj, layerName); % 根據(jù)神經(jīng)網(wǎng)絡層的名字獲取索引,用于網(wǎng)絡評價;obj.layers(index); % 用于網(wǎng)絡評價% 返回如下信息 % name = 'DCF' % inputs = {'x', 'z'} % outputs = {'response'} % params = {} % inputIndexsx = [7,14] % outputIndexes = 15 % paramIndexes = [] % forwardTime = 0.6927 % backwardTime = 0.2452 % block = [1x1 dagnn.DCF]2.5 獲取網(wǎng)絡變量的索引
index = getVarIndex(obj, varName); % 返回指定變量名的索引obj.vars(index); % 對變量進行評價% 返回如下信息 % name = 'conv1' % value = [] % der = [] % fanin = 1 % fanout = 1 % precious = 02.6 獲取參數(shù)的索引
index = getParamIndex(obj, paramName); % 指定參數(shù)名獲取參數(shù)的索引號obj.params(index);% 返回如下信息: % name = 'conv1f' % value = 3x3x1x32 gpuArray % der = 3x3x1x32 gpuArray % fanout = 2 % trainMethod = 'gradient' % learningRate = 0.01 % weightDecay = 0.00052.7 層、變量、參數(shù)拷貝
layer = getLayer(obj, layerName); %var = getVar(obj, varName); %param = getParam(obj, paramName); % getLayerExecutionOrder(obj);% 例如,孿生網(wǎng)絡: % 1 2 —— 3 4 —— 5 6 —— 13 —— 14 —— 15 % | | | | | | % 7 —— 8 9 —— 10 11 —— 12 %2.8 添加變量、參數(shù)、層
addVar(obj, varName);addParam(obj, paramName);addLayer(layerName, layer, input, output, params);3. 評價DAGNN
eval(obj, inputs); % 指定輸入值,評價DAGNN。 % 輸入應該是cell矩陣,如 input = {'inputName', inputValue, ...},該語句的調(diào)用將導致網(wǎng)絡的正向信息傳遞;并計算輸出變量的值;eval(obj, inputs, derOutputs); % 評價DAGNN前向和反向,執(zhí)行誤差反向傳播算法。 % 和inputs很類似,的人Outputs也是cell矩陣,{‘outputName’, outputDerValue, ...};4. 理解反向傳播
4.1 損失函數(shù)權(quán)重分配層
通常,對應到損失函數(shù),網(wǎng)絡從表來那個的輸入開始進行反向傳播。在這種情況下,outputDerValue可以解釋為輸出的權(quán)重,通常設置為1.例如, {‘objective’, 1}。從‘objective’輸出變量(權(quán)重為1)開始反向傳播。
然而,很多情況下DAGNN會包括很多損失函數(shù),在這種情況下,就需要設置不同的權(quán)重去平衡不同的目標,例如:{‘objective1’, w1, 'objective2', w2, ... }。
4.2 影響evaluation的因素
總結(jié)
以上是生活随笔為你收集整理的DAGNN:有向无环图神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [图]美专家称人类可能永远无法飞出太阳系
- 下一篇: WinNT/Win2000/WinXP中