pytorch中Dropout的具體用法
Dropout 是一種常用的正則化技術(shù),用于防止神經(jīng)網(wǎng)絡(luò)過(guò)擬合。PyTorch 提供了 nn.Dropout 層來(lái)實(shí)現(xiàn)這一功能。
基本用法
torch.nn.Dropout(p=0.5, inplace=False)
參數(shù)說(shuō)明:
- p (float): 每個(gè)元素被置為0的概率(默認(rèn)0.5)
- inplace (bool): 是否原地操作(默認(rèn)False)
工作原理
- 在前向傳播時(shí),Dropout 會(huì)以概率
p隨機(jī)將輸入張量的某些元素置為0 - 未被置0的元素會(huì)被縮放為
1/(1-p)倍(為了保持訓(xùn)練和測(cè)試時(shí)的期望值一致) - 在評(píng)估模式(
eval())下,Dropout 層不會(huì)執(zhí)行任何操作
在訓(xùn)練時(shí),Dropout 的輸出可以表示為:

其中 mm 是一個(gè)伯努利隨機(jī)變量矩陣(元素為0或1),pp 是dropout概率。
在測(cè)試時(shí),模型直接使用原始輸入:

使用示例
1. 基本使用
import torch
import torch.nn as nn
# 創(chuàng)建Dropout層,置0概率為0.3
dropout = nn.Dropout(p=0.3)
# 創(chuàng)建一個(gè)隨機(jī)輸入
input = torch.randn(5, 3)
print("原始輸入:\n", input)
# 訓(xùn)練模式下的輸出
output = dropout(input)
print("\nDropout輸出:\n", output)2. 在神經(jīng)網(wǎng)絡(luò)中使用
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 512)
self.dropout = nn.Dropout(p=0.2) # 20%的dropout
self.fc2 = nn.Linear(512, 10)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.dropout(x) # 應(yīng)用dropout
x = self.fc2(x)
return x3. 訓(xùn)練和評(píng)估模式切換
model = Net() # 訓(xùn)練模式(啟用dropout) model.train() output_train = model(torch.randn(1, 784)) # 評(píng)估模式(禁用dropout) model.eval() output_eval = model(torch.randn(1, 784))
注意事項(xiàng)
- 訓(xùn)練與測(cè)試的區(qū)別:Dropout 只在訓(xùn)練時(shí)激活,在測(cè)試/評(píng)估時(shí)自動(dòng)關(guān)閉
- 概率選擇:通常使用0.2-0.5之間的概率,輸入層可以使用更高的概率
- 縮放因子:PyTorch 自動(dòng)實(shí)現(xiàn)了縮放(乘以1/(1-p)),無(wú)需手動(dòng)處理
- 與BatchNorm配合:Dropout 和 BatchNorm 一起使用時(shí)可能需要調(diào)整學(xué)習(xí)率
變體
PyTorch 還提供了其他類型的 Dropout 層:
nn.Dropout1d:對(duì)1D特征圖的整個(gè)通道進(jìn)行dropoutnn.Dropout2d:對(duì)2D特征圖的整個(gè)通道進(jìn)行dropoutnn.Dropout3d:對(duì)3D特征圖的整個(gè)通道進(jìn)行dropout
這些變體在處理圖像等具有空間結(jié)構(gòu)的數(shù)據(jù)時(shí)特別有用。
到此這篇關(guān)于pytorch中Dropout的具體用法的文章就介紹到這了,更多相關(guān)pytorch Dropout內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample?Dropout方式
- Pytorch?nn.Dropout的用法示例詳解
- Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)Dropout應(yīng)用詳解解
- Pytorch之如何dropout避免過(guò)擬合
- PyTorch dropout設(shè)置訓(xùn)練和測(cè)試模式的實(shí)現(xiàn)
- pytorch Dropout過(guò)擬合的操作
- 淺談pytorch中的dropout的概率p
- PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作
- pytorch 實(shí)現(xiàn)在測(cè)試的時(shí)候啟用dropout
- pytorch 中nn.Dropout的使用說(shuō)明
相關(guān)文章
python實(shí)現(xiàn)SMTP郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)SMTP郵件發(fā)送功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
PyQt中使用QProcess運(yùn)行一個(gè)進(jìn)程的示例代碼
這篇文章主要介紹了在PyQt中使用QProcess運(yùn)行一個(gè)進(jìn)程,本例中通過(guò)按下按鈕,啟動(dòng)了windows系統(tǒng)自帶的記事本程序,即notepad.exe, 因?yàn)樗趙indows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)的PATH環(huán)境變量中,所以不需要特別指定路徑,需要的朋友可以參考下2022-12-12
Pycharm github配置實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了Pycharm github配置實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Python報(bào)錯(cuò)TypeError: unhashable type: ‘numpy.nd
在Python編程中,尤其是在處理數(shù)據(jù)時(shí),我們經(jīng)常使用numpy數(shù)組,然而,當(dāng)我們嘗試將numpy數(shù)組用作字典的鍵或集合的元素時(shí),就會(huì)遇到TypeError: unhashable type: 'numpy.ndarray',本文將探討這個(gè)錯(cuò)誤的原因,并給出幾種可能的解決方案,需要的朋友可以參考下2024-09-09

