Pytorch> = 1.0 implementasi densenet, dioptimalkan untuk menyimpan memori GPU.
Sementara densenet cukup mudah diimplementasikan dalam kerangka kerja pembelajaran yang mendalam, sebagian besar implmementation (seperti aslinya) cenderung haus memori. Secara khusus, jumlah peta fitur menengah yang dihasilkan oleh normalisasi batch dan operasi gabungan tumbuh secara kuadratik dengan kedalaman jaringan. Perlu ditekankan bahwa ini bukan properti yang melekat pada densenet, melainkan untuk implementasi.
Implementasi ini menggunakan strategi baru untuk mengurangi konsumsi memori densenet. Kami menggunakan pos pemeriksaan untuk menghitung peta fitur norma dan gabungan. Peta fitur perantara ini dibuang selama umpan depan dan dihitung ulang untuk pass mundur. Ini menambah 15-20% overhead waktu untuk pelatihan, tetapi mengurangi konsumsi peta fitur dari kuadratik ke linier.
Implementasi ini terinspirasi oleh laporan teknis ini, yang menguraikan strategi untuk densenet yang efisien melalui berbagi memori.
Dalam proyek Anda yang ada: ada satu file di folder models .
models/densenet.py adalah implementasi berdasarkan implementasi TorchVision dan Project Killer. Jika Anda peduli dengan kecepatan, dan memori bukanlah suatu opsi, berikan argumen efficient=False ke dalam konstruktor DenseNet . Kalau tidak, lulus efficient=True .
Opsi:
block_configefficient=True menggunakan versi efisien memorismall_inputs=False . Untuk CIFAR atau SVHN, atur small_inputs=True .Menjalankan demo:
Satu-satunya paket tambahan yang perlu Anda instal adalah Python-Fire:
pip install fireCUDA_VISIBLE_DEVICES=0 python demo.py --efficient True --data < path_to_folder_with_cifar 10> --save < path_to_save_dir >CUDA_VISIBLE_DEVICES=0,1,2 python demo.py --efficient True --data < path_to_folder_with_cifar 10> --save < path_to_save_dir >Opsi:
--depth (int) -Kedalaman jaringan (jumlah lapisan konvolusi) (default 40)--growth_rate (int) -Jumlah fitur yang ditambahkan per lapisan densenet (default 12)--n_epochs (int) -Jumlah zaman untuk pelatihan (default 300)--batch_size (int) -ukuran minibatch (default 256)--seed (int) -Secara manual atur benih acak (tidak ada default) Perbandingan dari dua implementasi (masing-masing adalah Densenet-BC dengan 100 lapisan, ukuran batch 64, diuji pada Nvidia Pascal Titan-X):
| Pelaksanaan | Cosumption Memori (GB/GPU) | Kecepatan (Batch Sec/Mini) |
|---|---|---|
| Naif | 2.863 | 0.165 |
| Efisien | 1.605 | 0.207 |
| Efisien (multi-GPU) | 0.985 | - |
@article{pleiss2017memory,
title={Memory-Efficient Implementation of DenseNets},
author={Pleiss, Geoff and Chen, Danlu and Huang, Gao and Li, Tongcheng and van der Maaten, Laurens and Weinberger, Kilian Q},
journal={arXiv preprint arXiv:1707.06990},
year={2017}
}