这是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许可的。