《動手學深度學習》第八天 丟棄法

2021-09-25 13:37:28 字數 1521 閱讀 8880

深度學習模型常常使用丟棄法(dropout) 來應對過擬合問題,本節中提到的丟棄法特指倒置丟棄法(inverted dropout)。

由於丟棄法在訓練中隱藏層神經元的丟棄是隨機的,輸出層的計算無法過度依賴隱藏單元中的任乙個,從而可以用來應對過擬合。

下面的dropout函式將以drop_prob的概率丟棄ndarray輸入x中的元素。

mxnet.ndarray.random.uniform(low=0, high=1, shape=_null, dtype=_null, ctx=none, out=none, **kwargs)

從均勻分布中抽取隨機樣本。樣本均勻分布在半開放區間[低、高(包括低,但不包括高)。

定義函式dropout(x, drop_prob):

若丟棄概率為1,即保持概率為0,那麼輸出和x形狀一樣的0矩陣

若丟棄概率在0–1之間,利用random.uniform函式從均勻分布中生成和x形狀一樣的樣本mask,我們來看一下這個過程:

定義模型引數:

定義乙個包含兩個隱藏層的多層感知機,其中兩個隱藏層的輸出個數都是256。需要3個w,和3個b引數。

定義模型:

下面定義的模型將全連線層和啟用函式relu串起來,並對每個啟用函式的輸出使用丟棄法。

先回顧一下下面兩個函式的用法:

定義的模型利用relu()將全連線層和啟用函式連線起來,接著利用函式is_training()來判斷是在訓練還是測試,只在訓練時使用丟棄法。第一層完成後第二層重複操作。

訓練和測試模型:

首先回顧兩個函式:

利用這兩個函式實現訓練和測試。

在gluon中,我們只需要在全連線層後新增dropout層並指定丟棄概率。在訓練模型時,dropout層將以指定的丟棄概率隨機丟棄上一層的輸出元素;在測試模型時,dropout層並不發揮作用。

①首先仍然是對於net引入sequential容器,然後新增第乙個隱藏層和啟用函式,第乙個丟棄層,第二個隱藏層和啟用函式,第二個丟棄層。最後對引數初始化。

②引入trainer,然後利用函式train_ch3訓練實現

C 學習第八天

介面 inte ce c 中介面定義的規則 1 介面本身的預設訪問級別為internal,即程式集本身訪問級別 2 介面中方法不能使用任何訪問修飾符 例如 public private internal protected 等修飾。系統自動為其設定為public 3 不能使用virtual修飾 4 ...

JS學習第八天

7.4 for in 使 更加的簡潔 7.5 陣列的應用 1.查詢 a.順序查詢 var a 3,7,11,43,87,5,99,56,82,16 var num number prompt 請輸入要查詢的值 var index 1 最初認為要找的值不在陣列中 for var i in a aler...

Linux C學習第八天

一 運算子與表示式 1.優先順序與結合性 優先順序 運算子的運算順序,優先順序低的先運算 結合性 優先順序相等的情況下,運算子按運算順序計算 2.基本算術運算子 取餘運算,結果的符號取決於運算子左邊那個數。3.型別轉換 強制轉換 在變數前使用括號進行轉換 int a int 1.2 隱式轉換 系統自...