Tugas 3 Praktikum Sains Data 2024 Genap: Klasifikasi Gambar dengan Neural Network

Kembali ke Sains Data

Petunjuk Umum

  1. Kerjakan secara individu.

  2. Kerjakan tugas ini menggunakan bahasa pemrograman Python dengan file format berupa interactive Python notebook (yaitu file berbentuk .ipynb BUKAN .py), yang bisa dibuat misalnya menggunakan Jupyter Notebook atau Google Colaboratory.

  3. Harap sertakan penjelasan untuk setiap proses secara singkat di samping potongan kode (bisa dengan teks / text box maupun dengan comment, ‘#’).

  4. Format nama file untuk Tugas 3 adalah:

    Nama Lengkap_NPM_Kelas SIAK_Tugas3PrakSaindat.ipynb

    Contoh penamaan yang benar:

    Yann André LeCun_2201234567_Kelas C_Tugas3PrakSaindat.ipynb

    Untuk mengumpulkan lebih dari satu file, gunakan .zip dengan format nama yang sama (dan file .ipynb yang di dalamnya juga masih menggunakan format nama yang sama).

  5. Apabila ada yang ingin direvisi setelah pengumpulan, lakukan pengumpulan ulang di Google Forms yang sama, tambahkan keterangan bahwa ada revisi, dan tambahkan kata “revisi” pada bagian akhir nama file, contohnya menjadi

    Yann André LeCun_2201234567_Kelas C_Tugas3PrakSaindat_revisi.ipynb

    Yann André LeCun_2201234567_Kelas C_Tugas3PrakSaindat_revisi2.ipynb

    Yann André LeCun_2201234567_Kelas C_Tugas3PrakSaindat_revisi3.ipynb

    (tentunya gunakan .zip kalau ada lebih dari satu file yang ingin dikumpulkan)

    (Revisi boleh dilakukan berkali-kali selama masa pengerjaan.)

  6. Pengumpulan tugas dilakukan ke Google Forms berikut ini, sesuai dengan kelas Anda di SIAK NG (link akan selalu sama untuk semua tugas praktikum Sains Data):

  7. Dengan durasi pengerjaan sekitar 3 (tiga) minggu, tenggat waktu (deadline) pengumpulan Tugas 3 ini (termasuk revisi) adalah:

    Sabtu, 8 Juni 2024, pukul 23.59 WIB.

    Mohon manfaatkan waktu Anda dengan baik (seperti mencicil pengerjaan, bahkan sudah selesai dari jauh-jauh hari) agar mengumpulkan tugas sebelum deadline. Keterlambatan pengumpulan bisa dikenakan pengurangan nilai atau bahkan dianggap tidak mengumpulkan, tergantung kesepakatan dari dosen. Meskipun demikian, lebih baik terlambat mengumpulkan daripada tidak mengumpulkan sama sekali.

  8. Sesuai standar Universitas Indonesia, plagiarisme dilarang keras dan bisa menyebabkan nilai tugas praktikum menjadi nol untuk semua pihak yang terlibat, tanpa peringatan apapun. Namun, Anda boleh memanfaatkan kode apapun yang ada di modul praktikum.

  9. Narahubung untuk Tugas 3 Praktikum Sains Data adalah:

    • Rifki - LINE: rifkyprakasya_

    • Bisma - LINE: bisma_joyosumarto

Soal

Tugas 3 ini terdiri dari soal a-e.

Di beberapa praktikum terakhir, kalian sudah mempelajari tentang neural network, baik menggunakan TensorFlow & Keras maupun menggunakan PyTorch. Untuk melatih apa yang telah kalian pelajari, mari kita coba contoh kasus yang sempat mengguncang dunia: klasifikasi gambar bilangan/digit 0-9 (dengan dataset MNIST) menggunakan neural network.

Untuk tugas ini, kalian dibebaskan memilih antara menggunakan TensorFlow & Keras atau menggunakan PyTorch. Pilihlah salah satu.

Kemudian, lakukan end-to-end machine learning, atau lebih tepatnya end-to-end classification, yang meliputi:

  1. Perolehan data

    Apabila kalian menggunakan TensorFlow & Keras, kalian bisa memperoleh dataset MNIST dengan kode seperti berikut:

    mnist = keras.datasets.mnist
    (X_train, y_train), (X_test, y_test) = mnist.load_data()

    Namun, jika kalian menggunakan PyTorch, kalian bisa memperoleh objek Dataset untuk dataset MNIST dengan kode seperti berikut:

    mnist_train = torchvision.datasets.MNIST(
        root = "./mnist_data", # folder tempat download
        train = True, # data training
        download = True, # karena belum ada
        # agar file gambar otomatis diubah menjadi tensor
        transform = torchvision.transforms.ToTensor()
    )
    
    mnist_test = torchvision.datasets.MNIST(
        root = "./mnist_data", # folder yang sama untuk tempat download
        train = False, # bukan data training
        download = True,
        transform = torchvision.transforms.ToTensor()
    )

    Setelah memperolehnya, terlepas apakah kalian menggunakan TensorFlow & Keras atau PyTorch, kalian bisa mempertimbangkan bagaimana cara memperoleh data validation: apakah dari data training atau dari data testing, atau bahkan data testing langsung dianggap data validation.

    Untuk PyTorch, jangan lupa mengubahnya menjadi DataLoader juga.

  2. Langkah preprocessing yang sekiranya diperlukan, kalau ada.

  3. Training: buatlah model neural network menggunakan framework yang telah Anda pilih (yaitu antara Tensorflow & Keras atau PyTorch) untuk menyelesaikan masalah klasifikasi gambar tersebut.

    Anda dibebaskan untuk memilih hyperparameter seperti

  • susunan arsitektur (berkreasilah!): banyaknya hidden layer, banyaknya neuron di tiap layer, dan fungsi aktivasi di tiap layer;

  • optimizer;

  • learning rate;

  • banyaknya epoch; dan

  • batch size.

    Lakukan training, simpanlah history dari training loss serta validation loss ke dalam file mymodel_loss_hist.csv, lalu tampilkan plot training loss dan validation loss terhadap epoch.

    Tidak ada larangan apabila Anda ingin melakukan hyperparameter tuning, yaitu mencoba beberapa pilihan hyperparameter (misalnya mencoba beberapa arsitektur) kemudian memilih model dengan performa terbaik.

    Simpan juga weights dari model Anda, yaitu ke dalam file mymodel.weights.h5 untuk TensorFlow & Keras, atau ke dalam file mymodel.pth untuk PyTorch.

  1. Mencoba prediksi: menggunakan model tersebut, lakukan prediksi kelas untuk beberapa gambar yang ada di data testing, dan bandingkan dengan kelas aslinya. (Anda boleh juga menampilkan hasil prediksi kelas dari gambar menggunakan slider seperti yang ada di modul praktikum).

  2. Evaluasi model: untuk model neural network yang telah Anda buat, tampilkan/hitunglah metrik evaluasi untuk klasifikasi, misalnya menampilkan confusion matrix atau menghitung Jaccard score.