Torch7學習筆記(二)nn Package


 

神經網絡Package

【目前還屬於草稿版,等我整個學習玩以后會重新整理】

模塊Module

module定義了訓練神經網絡需要的所有基礎方法,並且是可以序列化的抽象類。

module有兩種狀態變量:output和gradInput

 

[output] forward(input)

 

利用input對象計算其對應的output。通常input和output都是Tensor類型的。有時候會有例外例如table layers(Tensor的子類)。Forward之后,output變量應該被更新為新的值了。

 不建議重寫這個函數,二是應該去實現updateOutput(input)函數。

 

[gradInput] backward(input, gradOutput)

 

在module內進行反向傳播,默認前向傳播已經做過了且這個input應該和前向傳播的input是一樣的。否則梯度計算會出錯。

同樣的gradInput也是tensor類型,也有可能是table layers。

反向傳播過程包括計算兩種類型的梯度。

這個函數會調用下面兩個函數

updateGradInput(input,gradOutput)

 

accGradParameters(input,gradOutput,scale).

同樣的,最好不要重載backward函數,重載上面的這兩個函數會好一些。

 

updateOutput(input)

這個函數利用當前參數和input計算output,其結果就保存在output屬性。

 

updateGradInput(input,gradOutput)

計算這個模塊的input對應的梯度,這個應用應該是在NLP中,例如詞向量,它是input但是它同時是parameter,因此需要更新。

 

accGradParameters(input,gradOutput,scale)

計算模塊的參數的梯度咯,如果一個模塊沒有參數,那么就不需要做這一步。這些參數對應的狀態變量的名字是與模塊有關的。

scale這個參數是在參數梯度集成之前要乘上去的一個因子。

 

type(type [,tensorCache])

可用於將所有參數轉化為對應的type類型。

 tensors can be provided as inputs as well as modules

 

模塊中包含模型參數以及參數的梯度

這一點非常好,免得我們自己去求導。

weight和gradWeight是它的參數名字,它們是table類型

parameters()函數

如果自己寫模塊要重載這個函數。

[flatParameters,,flatGradParameters] getParameters()

這個函數返回兩個tensor

不能重載這個函數。

 

training()

這個函數把train屬性設置為true。它的好處在於對於一些特殊的模塊例如dropout,在training和evaluation過程是不一樣的。

evaluate()

這個函數把train設置為false。

 

findModules(typename)

 

Containers

這個類可以輕松建立復雜的神經網絡。

Container是基類,

Sequential,Parallel,Concat都是繼承它,DepthCOntact繼承concat類。

有兩個方法

add(module)

get(index)

 

listModules()

把網絡中所有的模塊都列出來,其中包括container模塊,self,以及其他的組件。

 

Transfer function

包括Tanh(),Sigmoid()

HardTanh()

這些非線性轉換函數都是element-wise的

 

HardShrink

module = nn.HardShrink(lambda)

相當於是一個閾值函數,絕對值大於lambda的書就是他本身,否則為0.

SoftShrink

和Hard差不多只不過這次平滑化一下。

具體公式見Torch官方文檔

 

SoftMax

這個不用解釋了

SoftMin

哈哈 居然還有這個呢

 

SoftPlus

保證輸出地全是正數;

 

 

 

再有就是Sigmoid和RELU了。這個就不再一一贅述了。

 

 

網絡層類型

1.簡單的類型

(需要參數的)

Linear:做線性變換

SparseLinear對sparse的輸入數據進行線性變換

Add 對輸入數據加上一個偏置項

Mul 對輸入數據乘上一個因子

CMul component-wise乘法??

CDiv 除

Euclidean 計算輸入數據到k means中心店的歐氏距離

weightedEuclidean 不用多說,加權的歐氏距離

(不需要參數,自適應的)

copy 對輸入進行copy 可能會進行類型轉變

Narrow 在制定維度上進行narrow操作

replicate 類似於MATLAB的repmat

reshape

view

select

 

Max

Min

Mean

Sum

這四個函數是在制定維度上做相應地操作

 

Exp,Abs,Power,Square,Sqrt,這是element-wise

Normalize 對輸入進行進行L_p正則化。

MM 矩陣矩陣相乘

 

其他的模塊

BatchNormalization 對一塊數據標准化

Identity 恆等函數 在paralleltable中很有用

dropout

SpatialDropout

Padding 在某一維度上補充

L1Penalty 對輸入加 sparsity

 

Table Layers

使用table構建更加復雜的網絡結構

table是container模塊的子模塊

concatTable

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM