1. 程式人生 > >mxnet-梯度,反饋與標準化(歸一化)

mxnet-梯度,反饋與標準化(歸一化)

1.attach_grad(grad_req='write', stype=None)

附加一個梯度快取在NDArray上,這樣,回退(反饋)能計算相應的梯度

引數:
grad_req ({'write', 'add', 'null'})
‘write’: 梯度將在每次回退時覆蓋。
 ‘add’: 梯度將在每次回退時增加到已有資料中。
‘null’: 不計算梯度
stype (str, optional) – 梯度儲存型別,預設與NDArray相同
 
 

2.grad

返回附加在NDArray中的梯度

 

3.backward(out_grad=None, retain_graph=False, train_mode=True)

回退,計算NDArray關於其中的變數的梯度

Parameters:
out_grad (NDArray, optional) – 頂部的梯度
retain_graph (bool, optional) – 是否為傳遞到其它相同的圖的回退保留計算圖,預設,計算曆史將被刪除。train_mode (bool, optional) – 是否計算訓練梯度或推理梯度
4.批量標準化(歸一化)BatchNorm

mxnet.ndarray.BatchNorm(data=None, gamma=None, beta=None, moving_mean=None, moving_var=None, eps=_Null, momentum=_Null, fix_gamma=_Null, use_global_stats=_Null, output_mean_var=_Null, axis=_Null, cudnn_off=_Null, out=None, name=None, **kwargs)

通過平均值和方差來標準化(歸一化)資料批,應用gamma尺度以及偏移beta。

假設輸入有多於一個的維度,則標準化在axis為1進行。我們首先計算沿該軸的均值和方差

接著,計算標準化輸出,尺寸與input相同,如下:

均值和var都將輸入作為向量來返回標量。

假設輸入在軸1上具有大小k,那麼gamma和beta都具有形狀(k,)。如果output_mean_var設定為true,則同時輸出data_means以及data_var的倒數,這對於向後傳遞是必需的。注意,這兩個輸出的梯度被阻塞。

除了輸入和輸出,這個運算元還接受兩個輔助狀態,moving_mean 和moving_var,它們是k長度向量。它們是整個資料集的全域性統計資訊,它們由以下更新:

moving_mean = moving_mean momentum + data_mean (1 - momentum)
moving_var = moving_var momentum + data_var (1 - momentum)
如果use_global_stats設定為true,則使用moving_mean和moving_var代替data_means和data_var來計算輸出。它經常在推理過程中使用。

引數軸axis指定輸入形狀的哪個軸表示“通道”(分別歸一化組)。預設值為1。指定- 1將通道軸axis設定為輸入形狀中的最後一個項。

gamma 和beta都是可學習的引數。但是如果 fix_gamma為真,則將伽瑪設定為1,其梯度為0。

注意: fix_gamma為True, 不提供稀疏支援,fix_gamma為False,稀疏張量們將回退。

 

Parameters:
data (NDArray) – 用於批量標準化的輸入資料
gamma (NDArray) – gamma陣列
beta (NDArray) – beta陣列
moving_mean (NDArray) – 輸入的執行平均值
moving_var (NDArray) – 輸入的執行方差
eps (double, optional, default=0.001)  -Epsion以防止DIV 0。當使用CUDNN(通常是1E-5)時,至少必須在CUDNN.H中定義CUDNN_BN_MIN_EPSILON
momentum (float, optional, default=0.9) – 移動平均動量
fix_gamma (boolean, optional, default=1) – 在訓練時固定伽馬
use_global_stats (boolean, optional, default=0) – 是否使用全域性移動統計而不是本地批量範數。這將迫使batch-norm變成一個scale換算運算子。
output_mean_var (boolean, optional, default=0) – 輸出平均值和逆STD
axis (int, optional, default='1') – 指定通道的形狀軸
cudnn_off (boolean, optional, default=0) – 如果有效不使用CUDNN操作。
out (NDArray, optional) – 輸出的NDArray控制結果
Returns:
out –函式輸出

Return type:
NDArray or  NDArrays列表