Catat Eksperimen Machine Learning dengan Weights and Biases

Setelah banyak eksperimen di bidang machine learning, saya masih merasa mencatat keluaran eksperimen itu bagian yang tidak mudah. Rasanya hampir semua eksperimen machine learning yang saya lakukan, saya catat dengan cara dan gaya yang berubah-ubah. Ada yang saya input manual ke excel, atau log ke csv, atau sekadar di notepad. Belum lagi ketika prosesnya, eksperimen kadang harus berubah, gagal, tidak sesuai harpaan… (>,<) dan akhirnya bikin mood mencatat rapi itu makin hilang di tengah-tengah.

Alhamdulillah akhir 2021 lalu nemu tools menarik untuk mencatat hasil eksperimen dengan rapi dan lengkap dan mudah, yakni dengan Weights and Biases.

Weights and Biases logo

Weights and Biases (atau kadang ditulis W&B atau kadang juga wandb) adalah suatu tools yang memudahkan pencatatan eksperimen machine learning. Yang menarik dari weights and biases, sesuai dengan taglinenya “Log (Almost) Anything”, dia mampu mencatat hampir semua hal yang terjadi pada saat eksperimen dengan mudah. Beberapa data yang saya ingat bisa dicatat saat setiap run adalah:

  • Nilai loss atau akurasi atau nilai-nilai lain yang berubah-ubah saat training
  • Pemakaian CPU/GPU
  • Media-media yang dihasilkan selama eksperimen (audio/citra/video)
  • Perubahan bobot dan bias pada model
  • Spesifikasi hardware, software, serta versi package python yang terinstall
  • Parameter-parameter model, seperti learning rate, batch size, dsb.

Semua data itu dicatat secara rapi di server saat setiap kali melakukan “run” eksperimen. Jadi ketika kita melakukan beberapa run kita juga bisa membandingkan grafik-grafik data-data tersebut, dan hal ini akan sangat bermanfaat untuk mengukur performa model atau debugging seiring berjalannya waktu.

Weights and Biases Tutorial

Weights and Biases sendiri sebenarnya bisa berjalan hampir di semua framework machine learning seperi Tensorflow, Pytorch, Scikit-learn, dll. Pada tutorial ini kita akan menggunakan kode yang kita gunakan untuk klasifikasi citra menggunakan CNN dan Pytorch.

Secara umum, ada lima langkah utama untuk melakukan pencatatan menggunakan weights and biases:

  1. wandb.login(): Untuk menghubungkan projek kita dengan akun W&B yang kita miliki. Secara default W&B membutuhkan koneksi internet untuk menyimpan hasil eksperimen ke server.
  2. wandb.init(): Digunakan untuk mendefinisikan projek apa yang sedang kita jalankan. Pada bagian ini kita juga mendefinisikan parameter apa yang akan dicatat dalam sebuah config.
  3. wandb.watch(): Digunakan untuk memperhatikan (mencatat) kondisi model dari waktu ke waktu
  4. wandb.log(): Digunakan untuk mencatat variabel-variabel lain yang dibutuhkan untuk di catat.
  5. wandb.finish(): Menandai akhir proses pencatatan, jika kita ingin memulai proses pencatatan yang lain.

Kode lengkap berupa Notebook disertai penjelasan (Bahasa Inggris) bisa diakses di sini: Pytorch Image Classification + Weights and Biases.

Pada kode tersebut tampak lima poin di atas bisa dilakukan hanya dalam 5 baris saja (masing-masing perintah satu baris). Menggunakan notebook di atas, saya coba bereksperimen dengan mengubah-ubah nilai learning rate dan banyaknya batch saat training. Hasilnya, tampilan ringkasan pencatatan di dashboard Weights and Biases untuk tutorial di atas seperti berikut:

Saya melakukan empat kali run. dengan mengubah-ubah parameter learning rate dan batch size

Nama-nama seperti “autumn-cloud-5” dan sebagainya, adalah nama yang secara otomatis diberikan W&B untuk membedakan setiap run eksperimen yang kita lakukan. Kita bisa mengubah-ubahnya semau kita jika itu dirasa memudahkan. Untuk detail setiap run bisa dilihat dengan klik setiap namanya, atau mengubah tampilan dalam bentuk tabel seperti di bawah ini:

Tersedia juga catatan dalam bentuk tabel untuk membandingkan pengaturan parameternya

W&B Sweeps

W&B juga menyediakan fitur untuk melakukan hyperparameter optimization. Dengan fitur ini, secara otomatis weights and biases akan mencari nilai-nilai untuk setiap parameter yang memberikan hasil terbaik untuk kasus kita. Hasil akhirnya, kita bisa melihat hubungan nilai parameter dengan loss yang diperoleh.

Saya ambil dari dokumentasi W&B, tutorial menyusul insyaAllah

Komunitas Weights and Biases

Yang menarik lagi tentang W&B ini bukan hanya tools yang disediakan namun juga komunitasnya. Saya bahkan lebih dulu mengikuti kegiatan-kegiatan di komunitas W&B sebelum saya mencoba toolsnya. W&B secara aktif mengadakan mini workshop, paper dan book reading group, seminar, Q&A session, dan masih banyak lagi, di mana kita bisa belajar banyak hal seputar machine learning secara umum tidak hanya seputar W&B.

Kalian bisa cek youtube channelnya untuk melihat beberapa rekaman yang tersedia, atau follow akun twitternya untuk bisa update kegiatan-kegiatan terbarunya.

Sekian, Semoga bermanfaat!

Tips Mengerjakan TOEFL ITP Online

Sebelumnya saya menulis pengalaman mendaftar dan mengikuti TOEFL ITP Online pada artikel Pengalaman TOEFL ITP Online. Kali ini akan saya share tips mengerjakan TOEFL ITP Online dan detil tiap sesinya!

1. Section 1 Listening Comprehension

Waktu : 35 menit, Jumlah : 50 soal.
Ketika memulai sesi ini, waktu akan berjalan dan audio soal akan berbunyi (Jika waktu sudah jalan, tapi tidak terdengar audio, langsung lambai-lambai ke webcam agar tes bisa dipause oleh proctor). Meskipun disebutkan maksimal pengerjaan sesi listening 35 menit, namun pada tiap soal dibatasi waktu pengerjaannya, mungkin sekitar 5-10 detik saya agak lupa. Akan ada notif semacam loading bar tertampil di layar untuk setiap soal. Jika waktu per soal habis (loading bar sudah mentok), maka otomatis layar menampilkan soal selanjutnya. Pastikan menjawab semua soal, karena setelah sampai di soal terakhir kita tidak bisa mengulang mendengarkan audio soal, meskipun waktu pengerjaan kita belum sampai 35 menit.

Continue reading

Pengalaman TOEFL ITP Online

Artikel kali ini membahas pengalaman saya saat mengikuti TOEFL ITP Online beberapa hari yang lalu. Tes secara online sangat praktis apalagi di masa pandemi seperti ini. Kita tidak perlu pergi jauh (di kota saya tidak ada institusi penyelenggara TOEFL) atau berkumpul dengan banyak orang dalam satu ruangan. Selain itu, kita juga bisa tahu langsung skor TOEFL kita setelah menyelesaikan tes (unofficial score).

1. Pendaftaran

Saya mengikuti TOEFL ITP Online yang diselenggarakan Elti Jogja. Pendaftaran dilakukan dengan chat WhatsApp yang info detailnya bisa dicek ke akun twitter ini: Elti Jogja. Dari sini, kita bisa tanyakan jadwal terdekat yang tersedia, kemudian setelah oke dengan jadwal tersebut dilanjutkan transfer biaya tes sebesar Rp 550.000. Biasanya pendaftaran dibuka sampai H-7 tes dan kuota masih tersedia.

2. Readiness Check

Beberapa hari sebelum tes (di kasus saya H-2), calon peserta wajib mengikuti sesi readiness check secara online. Sesi readiness check dilangsungkan dengan menggunakan Zoom dan berlangsung sekitar 1 jam. Di sesi ini akan dijelaskan gambaran jalannya TOEFL ITP Online, kelengkapan yang harus dipersiapkan, dan aturan-aturan yang harus ditaati peserta.

Continue reading
tes pemrograman

Solusi Soal Tes Pemrograman untuk Daftar Kerja

Pada artikel sebelumnya sempat saya tunjukkan dua soal dari tes pemrograman yang biasa dilakukan sebagai tahapan pada proses seleksi rekrutmen kerja. Dua soal tersebut saya peroleh dari tes pemrograman yang pernah saya ikuti. Soal tersebut tidak 100% sama, tapi cukup menggambarkan bagaimana tingkat kesulitan tes pemrograman di luar sana. Pada artikel ini saya akan membahas solusi pengerjaan soal-soal tersebut.

Soal #1

Dari semua tes pemrograman yang saya ikuti, soal ini menurut saya adalah soal paling mudah. Jika disimpulkan, pertanyaan penting dari soal ini adalah tiga poin:

  1. Bagimana cara membaca string yang terdiri dari beberapa kata (dipisahkan oleh spasi) dalam satu baris?
  2. Bagaimana cara mengecek huruf pertama tiap kata?
  3. Bagaimana cara mengecek sekaligus mengubah huruf kapital ke non-kapital dan sebaliknya?

Saat itu saya mengerjakan soal ini menggunakan C++, dan berikut adalah poin-poin jawaban saya dari pertanyaan di atas:

Continue reading

Belajar Machine Learning via StackExchange

Salah satu yang menantang menurut saya untuk belajar Artificial Intelligence/Machine Learning/Data Mining adalah untuk belajar saja, kadang kita perlu menuliskan sintaks kode yang lumayan panjang dan kompleks. Mulai dari merapikan data, preprocessing, feature extraction, sampai proses utamanya sendiri. Kadang hal ini yang bikin jadi down dulu sebelum memulai belajar, apalagi bagi kita yang kesulitan meluangkan banyak waktu untuk sekadar latihan.

Nah, salah satu solusi belajar yang saya temui cukup membantu saya adalah dengan aktif di ruang diskusi yang membahas Machine Learning di internet. Salah satu forum diskusi yang cukup baik menurut saya adalah forum-forum terbitan StackExchange, seperti Stackoverflow, CrossValidated, atau AIStackExchange. Bagi kita programmer, saya yakin nama-nama itu bukanlah nama yang asing. Walau bukan benar-benar “forum diskusi” (situs StackExchange adalah situs tanya jawab atau QA site) situs-situs tersebut cukup baik untuk digunakan sebagai sarana belajar.

Salah satu sisi positif yang saya rasakan dari aktif di StackExchange kita bisa belajar dengan memperdalam logika dan teori dengan waktu yang relatif lebih singkat, tanpa harus membuat kode yang cukup panjang.

Note: aktif di forum hanyalah salah satu alternatif bagi teman-teman yang kesulitan meluangkan waktu banyak tapi tetap ingin belajar. Namun, bagi teman-teman yang ingin serius mendalami bidang ini, saya tetap sangat menyarankan untuk meluangkan waktu khusus untuk belajar untuk menyelesaikan kasus-kasus dan coding dari scratch.

Belajar Machine Learning via StackExchange

Ada beberapa cara bagi yang ingin belajar machine learning via stackexchange. Bisa dengan cara membaca-baca pertanyaan yang telah dijawab, aktif bertanya, ataupun aktif menjawab.

Belajar dari Pertanyaan Orang Lain

Cobalah mencari pertanyaan yang setopik dengan materi yang ingin kalian perlajari. Telusuri satu persatu pertanyaan yang sudah pernah ditanyakan, siapa tahu kalian menemukan pertanyaan atau jawaban yang menarik yang sebenarnya cukup penting untuk ditanyakan tapi kita tidak pernah terpikirkan.

Seperti pertanyaan yang baru-baru ini saya temui: kenapa kita menggunakan istilah “Machine Learning”, bukan “Program Learning” atau Bisakah kita menggunakan Neural Network untuk mendeteksi suatu bilangan ituΒ  prima atau bukan.

Dengan melihat jawaban orang lain kita juga jadi bisa menambah wawasan dengan menemukan solusi solusi menarik bagaimana orang menyelesaikan masalahnya.

Berani Bertanya

Tidak ada salahnya untuk bertanya asal dengan cara yang baik. Ada dua cara untuk kita bertanya di StackExchange, yang pertama kita bisa membuat pertanyaan baru, dan yang kedua adalah bertanya untuk meminta kejelasan jawaban via kolom komentar (ini butuh reputasi).

Untuk membuat pertanyaan baru, pastikan terlebih dahulu pertanyaan itu belum pernah ditanyakan sebelumnya. Untuk lebih yakin, cobalah googling kembali pertanyaan itu, atau bahkan lakukan parafrase jika perlu. Selain itu, pastikan juga kalian sudah membaca aturan singkat di halaman tour yang selalu ada di situs StackExchange manapun.

Contohnya di StackOverflow kalian akan mengenal istilah MVCE (Minimum Veriviable Complete Example), yakni sebuah aturan bagaimana memberikan contoh program kita yang eror secara minimalis. Secara tidak langsung, kita akan belajar bagaimana menjelaskan eror pada program kita secara baik kepada orang lain.

Note: Ingat, jika ingin mendapat jawaban yang baik, maka bertanyalah dengan cara baik.

Mencoba Memberi Jawaban

Selalu ada ilmu yang bisa kita bagi! Cobalah cari pertanyaan-pertanyaan sederhana yang sekiranya bisa kita jawab. Dengan mencoba menjawab beberapa pertanyaan, kita akan belajar untuk memahami lebih dalam materi yang kita pelajari. Kalau ada orang bilang, dengan mengajar ilmu kita bertambah, maka benar saja, dengan mencoba menjawab pertanyaan-pertanyaan di sana kita akan semakin bertambah wawasannya. Kita akan belajar bagaimana menjelaskan dan memberi contoh yang menjawab pertanyaan pengguna lain.

Takut di-downvote πŸ™

Ketika memberi jawaban atau pertanyaan, tentunya kita akan mendapat beragam feedback entah dari pengguna lain atau dari si-penanya. Mulai dari komentar, flag, atau downvote. Jangan minder jika ada feedback negatif, toh, namanya juga belajar dan diskusi πŸ™‚ Manusia tidak ada yang sempurna untuk luput dari kesalahan dan juga tidak semua manusia baik dan ramah untuk berdiskusi. Gunakan hal tersebut sebagai pengalaman untuk menjawab di kemudian hari.

Saya juga masih beberapa kali dapat komentar pedas atau “flag” pada pertanyaan saya karena tidak sesuai topik, tetapi bukan berarti lalu saya akan menghakimi forum tersebut tidak ramah dan melepas kesempatan saya belajar di sana.

Mulai Belajar!

Banyak pengalaman dan ilmu yang saya peroleh dengan aktif di StackExchange. Saya ingat bagaimana StackExchange telah membantu saya tidak hanya menyelesaikan skripsi saya, tetapi juga memahami lebih dalam tools yang saya gunakan. Selain itu semenjak aktif di StackExchange, saya juga merasa banyak terlatih untuk berkomunikasi dengan bahasa inggris secara natural. Jadi, Jangan ragu untuk memulai πŸ˜‰ Semoga Bermanfaat!

Sumber gambar: Pexels