Rumah > Peranti teknologi > AI > Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

PHPz
Lepaskan: 2023-10-23 11:21:01
ke hadapan
1236 orang telah melayarinya

Jawapan 1

Penulis: Ye Xiaofei
Pautan: https://www.zhihu.com/question/2697072281/answer/369707281/answer 🎜 🎜#

Semasa saya bekerja di Mercedes-Benz di Amerika Utara, terdapat tempoh masa untuk menguji struktur dan parameter yang berbeza

Saya boleh melatih lebih daripada seratus model berbeza dalam seminggu Untuk tujuan ini, saya menggabungkan syarikat Amalan pendahulu kami dan beberapa pemikiran kami sendiri meringkaskan satu set kaedah pengurusan eksperimen kod yang cekap, yang berjaya membantu projek itu dilaksanakan sekarang kami berkongsi dengan anda di sini .

Gunakan fail Yaml untuk mengkonfigurasi parameter latihan

Saya tahu bahawa banyak repo sumber terbuka suka menggunakan input argparse untuk menghantar banyak latihan dan parameter berkaitan model, yang sebenarnya sangat tidak cekap. Di satu pihak, ia akan menyusahkan untuk memasukkan sejumlah besar parameter secara manual setiap kali anda berlatih Jika anda terus menukar nilai lalai dan kemudian pergi ke kod untuk menukarnya, ia akan membuang banyak masa. Di sini saya mengesyorkan agar anda terus

menggunakan fail Yaml untuk mengawal semua model dan parameter berkaitan latihan, dan memautkan penamaan yaml dengan nama model dan cap masa , perpustakaan pengesanan awan titik 3d yang terkenal OpenPCDet That's bagaimana ia dilakukan, seperti yang ditunjukkan dalam pautan ini di bawah.

github.com/open-mmlab/OpenPCDet/blob/master/tools/cfgs/kitti_models/pointrcnn.yaml

Saya memotong fail yaml daripada pautan yang diberikan di atas Bahagian daripada kandungan, seperti yang ditunjukkan dalam rajah di bawah, fail konfigurasi ini merangkumi cara pramemproses awan titik, jenis klasifikasi, serta pelbagai parameter tulang belakang, pengoptimum dan pemilihan kehilangan (tidak ditunjukkan dalam rajah, sila lihat pautan di atas untuk lengkap). Dalam erti kata lain,

Pada asasnya semua faktor yang boleh mempengaruhi model anda disertakan dalam fail ini, dan dalam kod, anda hanya perlu menggunakan yaml.load() yang mudah Baca semua parameter ini ke dalam dict. Lebih penting lagi, fail konfigurasi ini boleh disimpan ke folder yang sama seperti pusat pemeriksaan anda, supaya anda boleh menggunakannya secara langsung untuk latihan titik putus, finetune atau ujian langsung Apabila digunakan untuk ujian, anda juga boleh Ia mudah dipadankan keputusan dengan parameter yang sepadan.

Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

Pemodularisan kod adalah sangat penting

Sesetengah penyelidik suka menimpa keseluruhan sistem, apabila menulis kod penggandaan seperti menulis fungsi kehilangan dan model bersama-sama, sering akan menjejaskan seluruh badan Jika anda menukar sebahagian kecil, keseluruhan antara muka berikutnya juga akan berubah, jika kod itu dimodulasi dengan baik, anda boleh menjimatkan wang masa. Kod pembelajaran mendalam am pada asasnya boleh dibahagikan kepada beberapa blok besar (mengambil pytorch sebagai contoh): modul I/O, modul prapemprosesan, modul visualisasi, badan model (jika model besar mengandungi submodel, kelas baharu perlu ditambah) , fungsi kehilangan, pasca pemprosesan, dan digabungkan dalam latihan atau skrip ujian. Satu lagi faedah pemodulatan kod ialah ia memudahkan anda untuk menentukan parameter berbeza dalam yaml untuk bacaan yang mudah. Selain itu, pustaka importlib digunakan dalam banyak kod matang

Ia membolehkan anda untuk tidak menentukan model atau sub-model yang hendak digunakan semasa latihan dalam kod, tetapi boleh ditakrifkan secara langsung dalam yaml.

Tensorboard, tqdm digunakan

Saya pada asasnya menggunakan kedua-dua perpustakaan ini setiap kali. Tensorboard boleh menjejaki perubahan dalam lengkung kehilangan latihan anda dengan baik, menjadikannya lebih mudah untuk anda menilai sama ada model masih menumpu dan terlalu pasang Jika anda melakukan kerja berkaitan imej, anda juga boleh meletakkan beberapa hasil visualisasi padanya. Banyak kali anda hanya perlu melihat status penumpuan papan tensor untuk mengetahui prestasi model anda Adakah anda perlu meluangkan masa untuk menguji dan memperhalusinya secara berasingan Tqdm boleh membantu anda menjejaki kemajuan latihan anda secara intuitif, menjadikannya lebih mudah untuk anda berhenti awal.

Gunakan sepenuhnya Github

Sama ada anda sedang membangunkan bersama berbilang orang atau bekerja dalam projek solo, saya amat mengesyorkan menggunakan Github (syarikat mungkin menggunakan bitbucket, lebih kurang) untuk merekodkan kod anda . Untuk butiran, sila rujuk jawapan saya:

Sebagai pelajar siswazah, apakah alat penyelidikan saintifik yang anda fikir berguna?

https://www.zhihu.com/question/484596211/answer/2163122684

Rekodkan keputusan percubaan

Saya biasanya menyimpan excel am untuk merekodkan keputusan percubaan, lajur pertama ialah laluan yaml yang sepadan dengan model, lajur kedua ialah zaman latihan model, dan lajur ketiga ialah log keputusan ujian saya biasanya mengautomasikan proses ini, selagi jumlahnya laluan excel diberikan dalam skrip ujian, Ini boleh dilakukan dengan mudah menggunakan panda.

Jawapan 2

Penulis: Jason

Pautan: https://www.zhihu.com/question/21970722 /470576066

Kod pengurusan Git tiada kaitan dengan pembelajaran mendalam atau penyelidikan saintifik Anda mesti menggunakan alat pengurusan versi semasa menulis kod. Secara peribadi, saya rasa saya perlu membuat keputusan sama ada mahu menggunakan GitHub atau tidak. Lagipun, adalah mustahil untuk semua kod dalam syarikat itu dipautkan ke Git luaran.

Mari kita bincangkan beberapa perkara yang perlu anda beri perhatian semasa menulis kod:

1 Cuba masukkan parameter ujian menggunakan fail konfigurasi, dan cuba simpan konfigurasi dengan nama yang sama dengan fail log.

Di satu pihak, menghantar parameter luaran boleh mengelakkan terlalu banyak pengubahsuaian versi pada git disebabkan oleh parameter Memandangkan DL tidak mudah untuk nyahpepijat, kadang-kadang tidak dapat dielakkan untuk menggunakan git untuk melakukan perbandingan kod.

Sebaliknya, selepas menguji beribu-ribu versi, saya percaya anda tidak akan tahu model mana yang mempunyai tabiat baik yang sangat berkesan. Di samping itu, cuba berikan nilai lalai untuk parameter yang baru ditambah untuk memudahkan panggilan versi lama fail konfigurasi.

2 Cuba pisahkan model yang berbeza

Dalam projek yang sama, kebolehgunaan semula yang baik adalah tabiat pengaturcaraan yang sangat baik, tetapi dalam pengekodan DL yang berkembang pesat, diandaikan bahawa projek itu didorong oleh tugas Ya, ini kadangkala menjadi. halangan, jadi cuba untuk mengekstrak beberapa fungsi boleh guna semula Mengenai struktur model, cuba untuk memisahkan model yang berbeza ke dalam fail yang berbeza, yang akan membuat kemas kini masa depan lebih mudah. Jika tidak, beberapa reka bentuk yang kelihatan cantik akan menjadi tidak berguna selepas beberapa bulan.

3 Walaupun memenuhi tahap kestabilan tertentu, kerap membuat susulan pada versi baharu rangka kerja

Selalunya terdapat situasi yang memalukan Dari awal hingga akhir sesuatu projek, rangka kerja telah dikemas kini kepada beberapa versi, dan versi baharu mempunyai beberapa ciri yang menarik, tetapi malangnya beberapa API telah berubah. Oleh itu, anda boleh cuba memastikan versi rangka kerja stabil dalam projek. Cuba pertimbangkan kebaikan dan keburukan versi yang berbeza sebelum memulakan projek Kadangkala pembelajaran yang betul diperlukan.

Selain itu, miliki hati yang bertolak ansur terhadap rangka kerja yang berbeza. .

5 Rekod perubahan dalam prestasi kemas kini model, kerana anda mungkin perlu kembali dan memulakan semula pada bila-bila masa.

Pengarang: OpenMMLab

Pautan: https://www.zhihu.com/question/269707221/answer/2480772257

Sumber: Zhihu
Hak cipta milik pengarang. Untuk pencetakan semula komersial, sila hubungi pengarang untuk mendapatkan kebenaran Untuk pencetakan semula bukan komersial, sila nyatakan sumbernya.

Helo, penyoal, jawapan sebelum ini menyebut penggunaan Tensorboard, Weights&Biases, MLFlow, Neptune dan alatan lain untuk mengurus data eksperimen. Walau bagaimanapun, apabila semakin banyak roda dibina untuk alat pengurusan eksperimen, kos pembelajaran alat itu semakin tinggi. Bagaimana kita harus memilih?

MMCV memenuhi semua fantasi anda, dan anda boleh menukar alatan dengan mengubah suai fail konfigurasi.

github.com/open-mmlab/mmcv

Papan tensor merekodkan data percubaan:

Fail konfigurasi:

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='TensorboardLoggerHook') ])
Salin selepas log masuk

TensorBoard data kesan visualisasi data

Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

Fail konfigurasi

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])
Salin selepas log masuk
Kesan visualisasi data Wandb

Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap? (anda perlu log masuk ke wandb dengan python api terlebih dahulu)

Neptume merekodkan data percubaan

Fail konfigurasi

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook',  init_kwargs=dict(project='Your Neptume account/mmcv')) ])
Salin selepas log masuk
Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap? kesan visualisasi
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])
Salin selepas log masuk

mlflow merekodkan percubaan data

Fail Konfigurasi

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])
Salin selepas log masuk

MLFlow visualisasiDalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

dvclive Rekod data percubaan

Fail konfigurasi

rreee

fail di atas🜜dijanakan🜎🜎 sahaja fungsi paling asas pelbagai alat pengurusan eksperimen , kita boleh Ubah suai profil lebih jauh untuk membuka lebih banyak pose. Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?

Memiliki MMCV adalah setara dengan memiliki semua alatan pengurusan percubaan. Jika anda seorang budak lelaki sebelum ini, anda boleh memilih gaya nostalgia klasik TensorBoard jika anda ingin merakam semua data percubaan dan persekitaran eksperimen, anda juga boleh mencuba Wandb (Weights & Biases) atau Neptume; disambungkan ke Internet, anda boleh memilih mlflow ke Data eksperimen disimpan secara setempat, dan sentiasa ada alat yang sesuai untuk anda.

Selain itu, MMCV juga mempunyai sistem pengurusan log sendiri iaitu

TextLoggerHook! Ia akan menyimpan semua maklumat yang dijana semasa proses latihan, seperti persekitaran peranti, set data, kaedah permulaan model, kehilangan, metrik dan maklumat lain yang dijana semasa latihan, ke fail xxx.log tempatan. Anda boleh menyemak data percubaan sebelumnya tanpa menggunakan sebarang alat. Masih tertanya-tanya alat pengurusan eksperimen yang manakah hendak digunakan? Masih bimbang tentang kos pembelajaran pelbagai alat? Cepat dan dapatkan MMCV, dan alami pelbagai alat tanpa rasa sakit dengan hanya beberapa baris fail konfigurasi.

github.com/open-mmlab/mmcv

Atas ialah kandungan terperinci Dalam penyelidikan saintifik pembelajaran mendalam, bagaimana untuk mengurus kod dan eksperimen dengan cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan