นี่คือการใช้งาน Pytorch ของสถาปัตยกรรม Densenet-BC ตามที่อธิบายไว้ในเครือข่าย convolutional ที่เชื่อมต่อหนาแน่นโดย 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 นี้ซึ่งมีจุดสนทนาอื่น ๆ อีกสองสามจุด คุณอาจสนใจสคริปต์ของฉันที่เปรียบเทียบการไล่ระดับสี pytorch กับการไล่ระดับสีคบเพลิงและสคริปต์ของฉันที่ตรวจสอบการไล่ระดับสี pytorch
ปัญหาการบรรจบกันของฉันเกิดจากข้อผิดพลาด pytorch ที่สำคัญที่เกี่ยวข้องกับการใช้ torch.cat กับ convolutions ที่เปิดใช้งาน cudnn (ซึ่งเป็นค่าเริ่มต้นเมื่อใช้ cuda) ข้อผิดพลาดนี้ทำให้เกิดการไล่ระดับสีที่ไม่ถูกต้องและการแก้ไขข้อผิดพลาดนี้คือการปิดใช้งาน cudnn (ซึ่งไม่จำเป็นต้องทำอีกต่อไปเพราะมันได้รับการแก้ไข) การกำกับดูแลในกลยุทธ์การดีบักของฉันที่ทำให้ฉันไม่พบข้อผิดพลาดนี้คือฉันไม่คิดว่าจะปิดการใช้งาน Cudnn จนถึงตอนนี้ฉันได้สันนิษฐานว่าตัวเลือก CUDNN ในเฟรมเวิร์กนั้นปราศจากข้อผิดพลาด แต่ได้เรียนรู้ว่านี่ไม่ใช่กรณีเสมอไป ฉันอาจจะพบบางสิ่งบางอย่างถ้าฉันจะมีการดีบักที่เป็นตัวเลข torch.cat แคทที่มี convolutions แทนที่จะเป็นเลเยอร์ที่เชื่อมต่ออย่างเต็มที่
อดัมแก้ไขข้อผิดพลาด pytorch ที่เกิดขึ้นในการประชาสัมพันธ์นี้และถูกรวมเข้ากับสาขาหลักของคบเพลิง หากคุณสนใจที่จะใช้รหัส Densenet ในที่เก็บนี้ตรวจสอบให้แน่ใจว่าเวอร์ชัน pytorch ของคุณมี PR นี้และดาวน์โหลดหลังจาก 2017-02-10
คุณสามารถดูกราฟการคำนวณได้ที่นี่ซึ่งฉันสร้างด้วย make_graph.py ซึ่งฉันคัดลอกมาจากส่วนสำคัญของ Adam Paszke อดัมบอกว่า Pytorch จะมีวิธีที่ดีกว่าในการสร้างกราฟการคำนวณ
โดยค่าเริ่มต้น repo นี้จะฝึกอบรม Densenet-BC 100 ชั้นด้วยอัตราการเติบโต 12 ในชุดข้อมูล CIFAR-10 พร้อมการเพิ่มข้อมูล เนื่องจากขนาดหน่วยความจำ GPU นี่เป็นรุ่นที่ใหญ่ที่สุดที่ฉันสามารถทำงานได้ กระดาษรายงานข้อผิดพลาดการทดสอบขั้นสุดท้ายที่ 4.51 ด้วยสถาปัตยกรรมนี้และเราได้รับข้อผิดพลาดการทดสอบขั้นสุดท้ายที่ 4.77

ฉันยังลองฝึกอบรมตาข่ายกับอดัมและพบว่ามันไม่ได้มาบรรจบกันกับพารามิเตอร์ไฮเปอร์เริ่มต้นเมื่อเทียบกับ SGD ที่มีตารางอัตราการเรียนรู้ที่สมเหตุสมผล

ฉันไม่ได้ทดสอบสิ่งนี้อย่างละเอียดคุณควรตรวจสอบให้แน่ใจว่ามันทำงานได้ตามที่คาดไว้หากคุณวางแผนที่จะใช้และแก้ไข แจ้งให้เราทราบหากคุณพบว่ามีอะไรผิดปกติ
ฉันชอบที่จะรวมคุณสมบัติบางอย่างในโครงการของฉันที่ฉันไม่เห็นในการดำเนินการอื่น ๆ ที่มีอยู่ใน repo นี้ รหัสการฝึกอบรมใน train.py ใช้ argparse ดังนั้นขนาดแบทช์และพารามไฮเปอร์อื่น ๆ สามารถเปลี่ยนแปลงได้อย่างง่ายดายและเนื่องจากโมเดลคือการฝึกอบรมความคืบหน้าจะถูกเขียนลงในไฟล์ CSV ในไดเรกทอรีงานที่กำหนดโดยอาร์กิวเมนต์ จากนั้น plot.py สคริปต์แยกต่างหากพล็อตความคืบหน้าที่เขียนโดยสคริปต์การฝึกอบรม สคริปต์การฝึกอบรมเรียก plot.py หลังจากทุกยุคสมัย แต่มันสามารถทำงานได้ด้วยตัวเองเพื่อให้ตัวเลขสามารถปรับแต่งได้โดยไม่ต้องดำเนินการทดสอบทั้งหมดอีกครั้ง
ฉันคิดว่ามีวิธีการปรับปรุงการใช้หน่วยความจำในรหัสนี้เช่นเดียวกับในการใช้คบเพลิงที่มีประสิทธิภาพในพื้นที่อย่างเป็นทางการ ฉันยังสนใจในการสนับสนุนหลาย GPU
ติดตั้ง pytorch ครั้งแรก (ในการแจกแจง Anaconda3) ./train.py จะสร้างแบบจำลองเริ่มฝึกอบรมและบันทึกความคืบหน้าไปยัง 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 หรือ PLANTEXT ต่อไปนี้ รายการ 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