這是G. Huang,Z。 Liu,K。 Weinberger和L. van der Maaten的密集連接的捲積網絡中所述的Densenet-BC架構的Pytorch實現。該實現的CIFAR-10+錯誤率為4.77,具有100層的Densenet-BC,增長率為12。他們的官方實施以及與GitHub上的Liuzhuang13/Densenet Repo一起提供了許多其他第三方實施。

正如Densenet論文所示的這張表所示,它在CIFAR-10,CIFAR-100和SVHN上提供了競爭狀態。

Pytorch是一個很棒的新框架,很高興能進行這些重新實施,以便可以將它們與其他Pytorch項目集成在一起。
有趣的是,在實施此操作時,我很難讓它融合併比我平時更近地查看代碼的每個部分。我將模型的所有隱藏狀態和梯度與官方實施進行了比較,以確保我的代碼正確,甚至在CIFAR-10上培訓了VGG風格的網絡,並在此處使用培訓代碼。事實證明,我發現了一個新的關鍵pytorch錯誤(現已修復),這引起了這一問題。
我已經圍繞著我的原始消息,內容涉及該文檔中的內容以及我在此文檔中檢查的內容。我認為,對於其他人實施已知會融合的模型時,這應該有趣的是,看到我的發展和調試策略。我還啟動了這個Pytorch論壇主題,其中還有其他一些討論點。您可能還對我的腳本感興趣,該腳本將Pytorch漸變與火炬梯度和我的腳本進行數字檢查pytorch漸變。
我的收斂性問題是由於與啟用Cudnn的捲積使用torch.cat有關的關鍵pytorch錯誤(默認情況下是使用CUDA時)。此錯誤導致不正確的梯度,並且該錯誤的修復是禁用cudnn(不必再完成,因為它已固定)。調試策略的監督使我沒有發現這個錯誤,這是我認為沒有禁用Cudnn。到目前為止,我已經假設框架中的Cudnn選項是沒有錯誤的,但了解到並非總是如此。如果我將帶有捲積而不是完全連接的層的數字調試torch.cat層,我可能還會發現一些東西。
亞當修復了在此PR中引起這一點的Pytorch錯誤,並已合併到Torch的主分支中。如果您有興趣在此存儲庫中使用Densenet代碼,請確保您的Pytorch版本包含此PR,並在2017-02-10之後下載。
您可以在此處查看我使用sake_graph.py創建的計算圖,我從亞當·帕斯克(Adam Paszke)的角度複製了。亞當說,Pytorch很快將有一種更好的方法來創建計算圖。
默認情況下,此存儲庫訓練100層的Densenet-BC,在CIFAR-10數據集上的增長率為12,並具有數據增強。由於GPU內存大小,這是我能夠運行的最大模型。本文在此體系結構中報告了4.51的最終測試錯誤,我們獲得了4.77的最終測試誤差。

我還嘗試與亞當一起訓練網絡,發現與SGD相比,它與默認的超級參數沒有融合,並具有合理的學習率計劃。

我尚未對此進行徹底的測試,如果您打算使用和修改它,則應確保它可以按預期工作。讓我知道您是否發現有任何問題。
我喜歡在我的項目中包含一些功能,這些功能在此存儲庫中存在的其他重新實施中看不到。 train.py中的訓練代碼使用argparse ,因此可以輕鬆更改批處理大小和其他某些超級參數,並且隨著培訓的培訓,在參數也定義的工作目錄中的CSV文件時,進度將其寫出。然後是一個單獨的腳本plot.py繪製了由培訓腳本編寫的進度。訓練腳本調用plot.py在每個時期之後,但重要的是可以自己運行,因此可以在不重新運行整個實驗的情況下進行調整。
我認為,在官方的空間效率火炬實施中,有一些方法可以改善此代碼中的內存利用率。我也會對多GPU支持感興趣。
首先安裝pytorch(理想情況下,在Anaconda3分佈中)。 ./train.py將創建一個模型,開始訓練它,並將進度保存到args.save ,nas work/cifar10.base默認情況下。培訓腳本將在每個時期之後調用plot.py,以創建節省進度的地塊。
以下是Densenet紙的Bibtex條目,如果您使用此型號,則應引用該紙。
@article{Huang2016Densely,
author = {Huang, Gao and Liu, Zhuang and Weinberger, Kilian Q.},
title = {Densely Connected Convolutional Networks},
journal = {arXiv preprint arXiv:1608.06993},
year = {2016}
}
如果您使用此實現,也請考慮使用以下Bibtex或純文本輸入來引用此實現和代碼存儲庫。 Bibtex條目需要url乳膠包。
@misc{amos2017densenet,
title = {{A PyTorch Implementation of DenseNet}},
author = {Amos, Brandon and Kolter, J. Zico},
howpublished = {url{https://github.com/bamos/densenet.pytorch}},
note = {Accessed: [Insert date here]}
}
Brandon Amos, J. Zico Kolter
A PyTorch Implementation of DenseNet
https://github.com/bamos/densenet.pytorch.
Accessed: [Insert date here]
此存儲庫是Apache許可的。