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