هذا هو تطبيق Pytorch لهندسة Densenet-BC كما هو موضح في الشبكات التلافيفية المرتبطة بكثافة من قبل G. Huang ، Z. Liu ، K. Weinberger ، و L. van der Maaten. يحصل هذا التنفيذ على معدل خطأ CIFAR-10+ من 4.77 مع Densenet-BC 100 طبقة مع معدل نمو قدره 12. يتوفر تنفيذها الرسمي وروابط إلى العديد من تطبيقات الطرف الثالث الأخرى في Liuzhuang13/Densenet Repo على Github.

كما يوضح هذا الجدول من ورقة Densenet ، فإنه يوفر نتائج تنافسية من CIFAR-10 و CIFAR-100 و SVHN.

يعد Pytorch إطارًا جديدًا رائعًا ومن الجيد أن يكون لديك هذه الأنواع من عمليات إعادة التنفيذ حولها بحيث يمكن دمجها مع مشاريع Pytorch الأخرى.
ومن المثير للاهتمام أثناء تنفيذ ذلك ، واجهت الكثير من المتاعب في جعلها تتقارب ونظرت إلى كل جزء من الكود أقرب مما كنت عادة. لقد قارنت جميع الحالات والتدرجات الخفية للنموذج والتطبيق الرسمي للتأكد من أن الكود الخاص بي كان صحيحًا وحتى تدرب شبكة على غرار VGG على CIFAR-10 مع رمز التدريب هنا. اتضح أنني كشفت عن خطأ جديد في Pytorch (ثابت الآن) كان يسبب ذلك.
لقد تركت حول رسالتي الأصلية حول كيفية عدم عمل هذا والأشياء التي قمت بفحصها في هذا المستند. أعتقد أن هذا يجب أن يكون من المثير للاهتمام بالنسبة للأشخاص الآخرين رؤية استراتيجيات تطوري وتصحيح الأخطاء عند وجود مشكلات في تنفيذ نموذج معروف بأنه يتقارب. لقد بدأت أيضًا موضوع Pytorch Forum ، الذي يحتوي على عدد قليل من نقاط المناقشة الأخرى. قد تكون مهتمًا أيضًا بالبرنامج النصي الذي يقارن تدرجات Pytorch بتدرجات الشعلة والبرنامج النصي الذي يتحقق عدديًا من تدرجات Pytorch.
كانت مشكلات التقارب الخاصة بي بسبب حشرة Pytorch حاسمة تتعلق باستخدام torch.cat مع ملحقات مع تمكين Cudnn (وهو افتراضيًا عند استخدام CUDA). تسبب هذا الخطأ في التدرجات غير الصحيحة والإصلاح لهذا الخطأ هو تعطيل Cudnn (الذي لم يعد يتعين القيام به لأنه ثابت). الإشراف في استراتيجيات تصحيح الأخطاء التي تسببت في عدم العثور على هذا الخطأ هو أنني لم أفكر في تعطيل Cudnn. حتى الآن ، افترضت أن خيار Cudnn في الأطر خالية من الأخطاء ، لكنني تعلمت أن هذا ليس هو الحال دائمًا. ربما أكون قد وجدت شيئًا إذا كنت قد قمت بتصليح torch.cat عدديًا مع تلوينات بدلاً من الطبقات المتصلة بالكامل.
أصلح آدم خطأ Pytorch الذي تسبب في هذا في هذا العلاقات العامة وتم دمجه في فرع Torch's Master. إذا كنت مهتمًا باستخدام رمز Densenet في هذا المستودع ، فتأكد من أن إصدار Pytorch الخاص بك يحتوي على هذا العلاقات العامة وتم تنزيله بعد 2017-02-10.
يمكنك رؤية الرسم البياني لحساب هنا ، الذي أنشأته باستخدام Make_graph.py ، الذي قمت بنسخه من Gist's Adam Paszke. يقول آدم إن Pytorch سيكون لديه قريبًا طريقة أفضل لإنشاء الرسوم البيانية لحساب.
بشكل افتراضي ، يدرب هذا الريبو Densenet-BC 100 طبقة بمعدل نمو قدره 12 على مجموعة بيانات CIFAR-10 مع زيادة البيانات. بسبب أحجام ذاكرة GPU ، هذا هو أكبر طراز يمكنني تشغيله. تقارير الورقة عن خطأ في الاختبار النهائي لـ 4.51 مع هذه البنية ونحصل على خطأ اختبار نهائي قدره 4.77.

لقد حاولت أيضًا تدريب شبكة مع آدم ووجدت أنه لم يتلاقى أيضًا مع المعلمات المفرطة الافتراضية مقارنةً بـ SGD مع جدول معدل تعليمي معقول.

لم أختبر هذا الأمر تمامًا ، يجب عليك التأكد من أنه يعمل كما هو متوقع إذا كنت تخطط لاستخدامه وتعديله. اسمحوا لي أن أعرف إذا وجدت أي شيء خاطئ في ذلك.
أود تضمين بعض الميزات في مشاريعي التي لا أراها في بعض عمليات إعادة التنفيذ الأخرى الموجودة في هذا الريبو. يستخدم رمز التدريب في train.py argparse بحيث يمكن بسهولة تغيير حجم الدُفعة وبعض البرامى المفرطة الأخرى ومع تدريب النموذج ، يتم كتابة التقدم إلى ملفات CSV في دليل عمل تم تحديده أيضًا بواسطة الوسيطات. ثم يرسم plot.py سيناريو منفصلة التقدم الذي كتبه البرنامج النصي التدريبي. يدعو البرنامج النصي التدريبي إلى plot.py بعد كل عصر ، ولكن يمكن تشغيله من تلقاء نفسه حتى يمكن تعديل الأرقام دون إعادة تشغيل التجربة بأكملها.
أعتقد أن هناك طرقًا لتحسين استخدام الذاكرة في هذا الرمز كما هو الحال في تطبيق الشعلة الرسمي الفعال للفضاء. سأكون مهتمًا أيضًا بدعم متعدد GPU.
أول تثبيت Pytorch (من الناحية المثالية في توزيع Anaconda3). args.save work/cifar10.base سيقوم البرنامج النصي التدريبي بالاتصال بلوت.
فيما يلي إدخال bibtex لورقة Densenet التي يجب أن تستشهد بها إذا كنت تستخدم هذا النموذج.
@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 أو PlainText التالي. يتطلب إدخال Bibtex حزمة url Latex.
@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.