這是我參與8月更文挑戰的第7天,活動詳情查看: 8月更文挑戰html
本篇文章介紹深度學習中的其餘一些小技巧(tricks)python
上圖代表,隨着訓練epoch的增長,Training Set Accuracy也在持續上升,但到達某一點後,Test Set Accuracy開始降低,此時發生了OverFitting現象。咱們通常用Validation Set來對該臨界點進行檢測,當取到最大值時便中止訓練,將此時取得的參數保存起來用於最終的模型參數markdown
Early Stop的引入會提早終止訓練,即在Test Accuracy上升到臨界值不發生改變後,就中止訓練app
由此咱們總結how to early stop:post
Dropout是用來防止OverFitting十分有效的手段,它的假設是:學習
它具體的工做過程是,在前向傳播的過程當中,不一樣層神經元之間鏈接的權重 ,有必定機率會被暫時認爲是0(注意它並非給 賦值爲0)。經過Dropout,每次學習的過程當中,都或多或少有一些參數是不被考慮的,有效的減小了運算量,並且使得模型的泛化能力更強spa
在pytorch中添加Dropout也很是簡單code
net_dropped = torch.nn.Sequential(
torch.nn.Linear(784, 200),
torch.nn.Dropout(0.5),# drop 50% of the neuron
torch.nn.ReLU(),
torch.nn.Linear(200, 200),
torch.nn.Dropout(0.5),
torch.nn.ReLU(),
torch.nn.Linear(200, 10),
)
複製代碼
要注意,在Validation的時候不要設置Dropout,Dropout僅在Training的時候用到orm
在每一次迭代中,梯度降低使用整個訓練數據集來計算梯度,所以有時它也被稱爲批量梯度降低(Batch Gradient Descent)。而隨機梯度降低(Stochastic Gradient Descent)在每次迭代中只隨機採樣一個樣原本計算梯度xml
比方說,本來計算loss時假設有60k的數據,那麼梯度更新的公式爲
這樣計算的複雜度很大,可是若在這60K數據中取一個Batch大小的數據,假設Batch只有1K,這樣就能極大的減少計算量