神經網絡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
