簡體   English   中英

為什么添加 dropout 后,我的 CNN 程序的准確性沒有提高?

[英]Why is my CNN program not improving in accuracy after I add a dropout?

我正在使用 CNN 來識別 CiFar10 數據集中的圖像,在添加 dropout 之前,cnn 的准確率達到了 58%,但在添加之后,它下降到了 52%。 是不是網絡沒有過擬合? 因為我懷疑是這樣的。 在再添加兩個 dropout 之后,准確率上升到 55%,但我仍然對它為什么會下降感到困惑。 這是我的代碼:

class Net(nn.Module):
def __init__(self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv2d(3, 12, 3, padding=1)
    self.pool = nn.MaxPool2d(2, 2)
    self.conv2 = nn.Conv2d(12, 24, 3, padding=1)
    self.conv3 = nn.Conv2d(24, 48, 3, padding=1)
    self.conv4 = nn.Conv2d(48, 48, 3, padding=1)
    self.dropout1 = nn.Dropout(p=0.2)
    self.dropout2 = nn.Dropout(p=0.2)
    self.dropout3 = nn.Dropout(p=0.3)
    self.fc1 = nn.Linear(48 * 2 * 2, 120)
    self.fc2 = nn.Linear(120, 84)
    self.fc3 = nn.Linear(84, 10)


def forward(self, x):
    x = self.pool(self.dropout1(F.relu(self.conv1(x))))
    x = self.pool(self.dropout2(F.relu(self.conv2(x))))
    x = self.pool(self.dropout3(F.relu(self.conv3(x))))
    x = self.pool(F.relu(self.conv4(x)))
    x = x.view(-1, 48 * 2 * 2)
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = self.fc3(x)
    return x

如果您從頭開始訓練和初始化,您還需要小心比較運行。 隨機權重初始化有時會產生您所看到的變化,尤其是在其他超參數(例如學習率、批量大小等)尚未優化的情況下。 即便如此,批量改組也會導致變化。 您應該在調試所有這些時設置隨機種子和/或保存權重參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM