1. Ringkasan
Dalam lab ini, Anda akan mempelajari cara membuat pengklasifikasi Keras. Daripada mencoba mencari tahu kombinasi sempurna lapisan jaringan neural untuk mengenali bunga, kita akan menggunakan teknik yang disebut transfer learning terlebih dahulu untuk mengadaptasi model terlatih yang canggih ke set data kita.
Lab ini mencakup penjelasan teoretis yang diperlukan tentang jaringan neural dan merupakan titik awal yang baik bagi developer yang mempelajari deep learning.
Lab ini adalah Bagian 2 dari seri "Keras di TPU". Anda dapat melakukannya dalam urutan berikut atau secara terpisah.
- Pipeline data berkecepatan TPU: tf.data.Dataset dan TFRecords
- [LAB INI] Model Keras pertama Anda, dengan transfer learning
- Jaringan neural konvolusional, dengan Keras dan TPU
- Convnets, squeezenet, Xception modern, dengan Keras dan TPU

Yang akan Anda pelajari
- Untuk membuat pengklasifikasi gambar Keras Anda sendiri dengan lapisan softmax dan kerugian entropi silang
- Untuk menipu 😈, gunakan transfer learning, bukan membuat model Anda sendiri.
Masukan
Jika Anda melihat sesuatu yang tidak beres dalam codelab ini, harap beri tahu kami. Masukan dapat diberikan melalui masalah GitHub [link masukan].
2. Mulai cepat Google Colaboratory
Lab ini menggunakan Google Collaboratory dan tidak memerlukan penyiapan di pihak Anda. Colaboratory adalah platform notebook online untuk tujuan pendidikan. Colab menawarkan pelatihan CPU, GPU, dan TPU gratis.

Anda dapat membuka notebook contoh ini dan menjalankan beberapa sel untuk memahami Colaboratory.
Pilih backend TPU

Di menu Colab, pilih Runtime > Ubah jenis runtime, lalu pilih TPU. Dalam codelab ini, Anda akan menggunakan TPU (Tensor Processing Unit) yang andal yang didukung untuk pelatihan yang dipercepat hardware. Koneksi ke runtime akan terjadi secara otomatis pada eksekusi pertama, atau Anda dapat menggunakan tombol "Hubungkan" di sudut kanan atas.
Eksekusi notebook

Jalankan sel satu per satu dengan mengklik sel dan menggunakan Shift-ENTER. Anda juga dapat menjalankan seluruh notebook dengan Runtime > Run all
Daftar isi

Semua notebook memiliki daftar isi. Anda dapat membukanya menggunakan panah hitam di sebelah kiri.
Sel tersembunyi

Beberapa sel hanya akan menampilkan judulnya. Ini adalah fitur notebook khusus Colab. Anda dapat mengklik dua kali untuk melihat kode di dalamnya, tetapi biasanya tidak terlalu menarik. Biasanya mendukung fungsi atau visualisasi. Anda tetap perlu menjalankan sel ini agar fungsi di dalamnya dapat ditentukan.
Autentikasi

Colab dapat mengakses bucket Google Cloud Storage pribadi Anda asalkan Anda melakukan autentikasi dengan akun yang sah. Cuplikan kode di atas akan memicu proses autentikasi.
3. [INFO] Pengklasifikasi jaringan neural 101
Singkatnya
Jika semua istilah yang dicetak tebal di paragraf berikutnya sudah Anda ketahui, Anda dapat melanjutkan ke latihan berikutnya. Jika Anda baru memulai deep learning, selamat datang, dan silakan baca terus.
Untuk model yang dibuat sebagai urutan lapisan, Keras menawarkan Sequential API. Misalnya, pengklasifikasi gambar yang menggunakan tiga lapisan padat dapat ditulis di Keras sebagai:
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(50, activation="relu"),
tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])
# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
optimizer='adam',
loss= 'categorical_crossentropy',
metrics=['accuracy']) # % of correct answers
# train the model
model.fit(dataset, ... )

Jaringan neural padat
Ini adalah jaringan neural paling sederhana untuk mengklasifikasikan gambar. Jaringan ini terdiri dari "neuron" yang disusun dalam lapisan. Lapisan pertama memproses data input dan memasukkan outputnya ke lapisan lain. Lapisan ini disebut "padat" karena setiap neuron terhubung ke semua neuron di lapisan sebelumnya.

Anda dapat memasukkan gambar ke dalam jaringan seperti itu dengan meratakan nilai RGB semua pikselnya menjadi vektor panjang dan menggunakannya sebagai input. Teknik ini bukan yang terbaik untuk pengenalan gambar, tetapi kami akan meningkatkannya nanti.
Neuron, aktivasi, RELU
"Neuron" menghitung jumlah bobot semua inputnya, menambahkan nilai yang disebut "bias", dan meneruskan hasilnya melalui "fungsi aktivasi". Bobot dan bias tidak diketahui pada awalnya. Bobot ini akan diinisialisasi secara acak dan "dipelajari" dengan melatih jaringan neural pada banyak data yang diketahui.

Fungsi aktivasi yang paling populer disebut RELU untuk Rectified Linear Unit. Ini adalah fungsi yang sangat sederhana seperti yang dapat Anda lihat pada grafik di atas.
Aktivasi softmax
Jaringan di atas diakhiri dengan lapisan 5 neuron karena kita mengklasifikasikan bunga ke dalam 5 kategori (mawar, tulip, dandelion, daisy, bunga matahari). Neuron di lapisan perantara diaktifkan menggunakan fungsi aktivasi RELU klasik. Namun, di lapisan terakhir, kita ingin menghitung angka antara 0 dan 1 yang merepresentasikan probabilitas bunga ini sebagai mawar, tulip, dan sebagainya. Untuk itu, kita akan menggunakan fungsi aktivasi yang disebut "softmax".
Penerapan softmax pada vektor dilakukan dengan mengambil eksponensial setiap elemen, lalu menormalisasi vektor, biasanya menggunakan norma L1 (jumlah nilai absolut) sehingga nilai-nilai tersebut berjumlah 1 dan dapat ditafsirkan sebagai probabilitas.

Kerugian entropi silang
Setelah jaringan neural kita menghasilkan prediksi dari gambar input, kita perlu mengukur seberapa baik prediksi tersebut, yaitu jarak antara yang disampaikan jaringan dan jawaban yang benar, yang sering disebut "label". Ingatlah bahwa kita memiliki label yang benar untuk semua gambar dalam set data.
Jarak apa pun akan berfungsi, tetapi untuk masalah klasifikasi, yang disebut "jarak entropi silang" adalah yang paling efektif. Kita akan menyebutnya sebagai fungsi error atau "loss":

Penurunan gradien
"Melatih" jaringan neural sebenarnya berarti menggunakan gambar dan label pelatihan untuk menyesuaikan bobot dan bias sehingga dapat meminimalkan fungsi loss cross-entropy. Berikut cara kerjanya.
Cross-entropy adalah fungsi bobot, bias, piksel gambar pelatihan, dan kelasnya yang diketahui.
Jika kita menghitung turunan parsial cross-entropy relatif terhadap semua bobot dan semua bias, kita akan mendapatkan "gradien", yang dihitung untuk gambar, label, dan nilai bobot dan bias saat ini. Ingatlah bahwa kita dapat memiliki jutaan bobot dan bias, sehingga menghitung gradien akan membutuhkan banyak pekerjaan. Untungnya, Tensorflow melakukannya untuk kita. Properti matematika gradien adalah bahwa gradien mengarah "ke atas". Karena kita ingin menuju tempat dengan entropi silang yang rendah, kita bergerak ke arah yang berlawanan. Kita memperbarui bobot dan bias dengan sebagian kecil gradien. Kemudian, kita melakukan hal yang sama berulang kali menggunakan batch berikutnya dari gambar dan label pelatihan, dalam loop pelatihan. Semoga, proses ini akan mencapai titik di mana entropi silang minimal, meskipun tidak ada jaminan bahwa minimum ini unik.

Mini-batching dan momentum
Anda dapat menghitung gradien hanya pada satu contoh gambar dan langsung memperbarui bobot dan bias, tetapi melakukannya pada batch, misalnya, 128 gambar akan memberikan gradien yang lebih baik dalam merepresentasikan batasan yang diberlakukan oleh contoh gambar yang berbeda dan oleh karena itu cenderung lebih cepat mencapai solusi. Ukuran tumpukan mini adalah parameter yang dapat disesuaikan.
Teknik ini, yang terkadang disebut "stochastic gradient descent", memiliki manfaat lain yang lebih pragmatis: bekerja dengan batch juga berarti bekerja dengan matriks yang lebih besar dan biasanya lebih mudah dioptimalkan di GPU dan TPU.
Konvergensi masih bisa sedikit kacau dan bahkan dapat berhenti jika vektor gradien semuanya nol. Apakah itu berarti kita telah menemukan nilai minimum? Tidak selalu. Komponen gradien dapat bernilai nol pada minimum atau maksimum. Dengan vektor gradien yang memiliki jutaan elemen, jika semuanya adalah nol, probabilitas bahwa setiap nol sesuai dengan titik minimum dan tidak ada yang sesuai dengan titik maksimum cukup kecil. Dalam ruang dengan banyak dimensi, titik pelana cukup umum dan kita tidak ingin berhenti di titik tersebut.

Ilustrasi: titik pelana. Gradiennya adalah 0, tetapi bukan minimum di semua arah. (Atribusi gambar Wikimedia: By Nicoguaro - Own work, CC BY 3.0)
Solusinya adalah menambahkan beberapa momentum ke algoritma pengoptimalan sehingga dapat melewati titik pelana tanpa berhenti.
Glosarium
batch atau tumpukan mini: pelatihan selalu dilakukan pada batch data dan label pelatihan. Dengan demikian, algoritma dapat melakukan konvergensi. Dimensi "batch" biasanya merupakan dimensi pertama tensor data. Misalnya, tensor dengan bentuk [100, 192, 192, 3] berisi 100 gambar berukuran 192x192 piksel dengan tiga nilai per piksel (RGB).
Kerugian entropi silang: fungsi kerugian khusus yang sering digunakan dalam pengklasifikasi.
lapisan padat: lapisan neuron di mana setiap neuron terhubung ke semua neuron di lapisan sebelumnya.
fitur: input jaringan saraf terkadang disebut "fitur". Seni mencari tahu bagian mana dari set data (atau kombinasi bagian) yang akan dimasukkan ke jaringan neural untuk mendapatkan prediksi yang baik disebut "rekayasa fitur".
label: nama lain untuk "kelas" atau jawaban yang benar dalam masalah klasifikasi terawasi
kecepatan pembelajaran: fraksi gradien yang digunakan untuk memperbarui bobot dan bias pada setiap iterasi loop pelatihan.
logits: output lapisan neuron sebelum fungsi aktivasi diterapkan disebut "logits". Istilah ini berasal dari "fungsi logistik" alias "fungsi sigmoid" yang dulunya merupakan fungsi aktivasi paling populer. "Neuron outputs before logistic function" disingkat menjadi "logits".
loss: fungsi error yang membandingkan output jaringan neural dengan jawaban yang benar
neuron: menghitung jumlah input yang diberi bobot, menambahkan bias, dan meneruskan hasilnya melalui fungsi aktivasi.
enkode one-hot: kelas 3 dari 5 dienkode sebagai vektor 5 elemen, semua nol kecuali yang ke-3 yaitu 1.
relu: unit linear yang diperbaiki. Fungsi aktivasi yang populer untuk neuron.
sigmoid: fungsi aktivasi lain yang dulu populer dan masih berguna dalam kasus khusus.
softmax: fungsi aktivasi khusus yang bekerja pada vektor, meningkatkan perbedaan antara komponen terbesar dan semua komponen lainnya, serta menormalisasi vektor agar memiliki jumlah 1 sehingga dapat ditafsirkan sebagai vektor probabilitas. Digunakan sebagai langkah terakhir dalam pengklasifikasi.
tensor: "Tensor" seperti matriks, tetapi dengan jumlah dimensi yang berubah-ubah. Tensor 1 dimensi adalah vektor. Tensor 2 dimensi adalah matriks. Kemudian, Anda dapat memiliki tensor dengan 3, 4, 5, atau lebih dimensi.
4. Transfer Learning
Untuk masalah klasifikasi gambar, lapisan padat mungkin tidak cukup. Kita harus mempelajari lapisan konvolusional dan berbagai cara untuk menyusunnya.
Namun, kita juga bisa menggunakan pintasan. Ada jaringan neural konvolusional yang terlatih sepenuhnya dan tersedia untuk didownload. Anda dapat memotong lapisan terakhirnya, yaitu head klasifikasi softmax, dan menggantinya dengan head Anda sendiri. Semua bobot dan bias yang dilatih tetap seperti semula, Anda hanya melatih ulang lapisan softmax yang ditambahkan. Teknik ini disebut transfer learning dan secara mengejutkan, teknik ini berfungsi selama set data yang digunakan untuk melatih awal jaringan neural "cukup dekat" dengan set data Anda.
Interaktif
Buka notebook berikut, jalankan sel (Shift-ENTER), dan ikuti petunjuk di mana pun Anda melihat label "TINDAKAN DIPERLUKAN".
Keras Flowers transfer learning (playground).ipynb
Informasi tambahan
Dengan transfer learning, Anda mendapatkan manfaat dari arsitektur jaringan neural konvolusional canggih yang dikembangkan oleh peneliti terkemuka dan dari pra-pelatihan pada set data gambar yang sangat besar. Dalam kasus ini, kita akan menggunakan transfer learning dari jaringan yang dilatih menggunakan ImageNet, yaitu database gambar yang berisi banyak tanaman dan pemandangan luar ruangan, yang cukup mirip dengan bunga.

Ilustrasi: menggunakan jaringan neural konvolusional yang kompleks, yang sudah dilatih, sebagai kotak hitam, melatih ulang hanya head klasifikasi. Inilah yang disebut pemelajaran transfer. Kita akan melihat cara kerja pengaturan rumit lapisan konvolusional ini nanti. Untuk saat ini, itu adalah masalah orang lain.
Pemelajaran transfer di Keras
Di Keras, Anda dapat membuat instance model terlatih dari koleksi tf.keras.applications.*. Misalnya, MobileNet V2 adalah arsitektur konvolusional yang sangat baik dan tetap berukuran wajar. Dengan memilih include_top=False, Anda akan mendapatkan model terlatih tanpa lapisan softmax akhir sehingga Anda dapat menambahkan lapisan Anda sendiri:
pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False
model = tf.keras.Sequential([
pretrained_model,
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(5, activation='softmax')
])
Perhatikan juga setelan pretrained_model.trainable = False. Hal ini membekukan bobot dan bias model terlatih sebelumnya sehingga Anda hanya melatih lapisan softmax. Proses ini biasanya melibatkan bobot yang relatif sedikit dan dapat dilakukan dengan cepat serta tidak memerlukan set data yang sangat besar. Namun, jika Anda memiliki banyak data, transfer learning dapat bekerja lebih baik dengan pretrained_model.trainable = True. Bobot yang telah dilatih sebelumnya kemudian memberikan nilai awal yang sangat baik dan masih dapat disesuaikan oleh pelatihan agar lebih sesuai dengan masalah Anda.
Terakhir, perhatikan lapisan Flatten() yang disisipkan sebelum lapisan softmax padat Anda. Lapisan padat bekerja pada vektor data datar, tetapi kita tidak tahu apakah itu yang ditampilkan oleh model terlatih. Itulah sebabnya kita perlu meratakan. Pada bab berikutnya, saat mempelajari arsitektur konvolusional, kita akan menjelaskan format data yang ditampilkan oleh lapisan konvolusional.
Anda akan mendapatkan akurasi mendekati 75% dengan pendekatan ini.
Solusi
Berikut adalah notebook solusi. Anda dapat menggunakannya jika mengalami masalah.
Keras Flowers transfer learning (solution).ipynb
Yang telah kita bahas
- 🤔 Cara menulis pengklasifikasi di Keras
- 🤓 dikonfigurasi dengan lapisan terakhir softmax, dan kerugian entropi silang
- 😈 Pemelajaran transfer
- 🤔 Melatih model pertama Anda
- 🧐 Mengikuti kerugian dan akurasinya selama pelatihan
Luangkan waktu sejenak untuk meninjau checklist ini dalam pikiran Anda.
5. Selamat!
Sekarang Anda dapat membuat model Keras. Lanjutkan ke lab berikutnya untuk mempelajari cara menyusun lapisan konvolusional.
- Pipeline data berkecepatan TPU: tf.data.Dataset dan TFRecords
- [LAB INI] Model Keras pertama Anda, dengan transfer learning
- Jaringan neural konvolusional, dengan Keras dan TPU
- Convnets, squeezenet, Xception modern, dengan Keras dan TPU
TPU dalam praktik
TPU dan GPU tersedia di Cloud AI Platform:
- Di Deep Learning VM
- Di AI Platform Notebooks
- Dalam tugas AI Platform Training
Terakhir, kami menyambut masukan dengan tangan terbuka. Beri tahu kami jika Anda melihat sesuatu yang tidak beres di lab ini atau jika menurut Anda lab ini harus ditingkatkan. Masukan dapat diberikan melalui masalah GitHub [link masukan].

|

