1. Ringkasan
Di lab ini, Anda akan mempelajari cara membangun pengklasifikasi Keras. Alih-alih mencoba mengetahui kombinasi sempurna dari lapisan jaringan neural untuk mengenali bunga, pertama-tama kita akan menggunakan teknik yang disebut pemelajaran transfer (transfer learning) untuk menyesuaikan 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 "Keras on TPU" Workspace kami. Anda dapat melakukannya dalam urutan berikut atau secara terpisah.
- Pipeline data berkecepatan TPU: tf.data.Dataset dan TFRecords
- [THIS LAB] Model Keras pertama Anda, dengan pemelajaran transfer
- Jaringan neural konvolusional, dengan Keras dan TPU
- ConvNets, SqueezeNet, Xception modern, dengan Keras dan TPU
Yang akan Anda pelajari
- Untuk membangun pengklasifikasi gambar Keras Anda sendiri dengan lapisan softmax dan loss entropi silang
- Untuk menipu 🎬, gunakan pemelajaran transfer, bukan membangun model Anda sendiri.
Masukan
Jika Anda melihat ada yang tidak beres dalam codelab ini, beri tahu kami. Masukan dapat diberikan melalui masalah GitHub [link masukan].
2. Memulai cepat Google Colaboratory
Lab ini menggunakan Kolaborasi Google dan tidak memerlukan penyiapan dari Anda. Colaboratory adalah platform notebook online untuk tujuan pendidikan. Program ini menawarkan pelatihan CPU, GPU, dan TPU gratis.
Anda dapat membuka notebook contoh ini dan menjalankan beberapa sel untuk memahami Colaboratory.
Memilih backend TPU
Di menu Colab, pilih Runtime > Ubah jenis runtime, lalu pilih TPU. Di codelab ini, Anda akan menggunakan TPU (Tensor Processing Unit) canggih yang didukung untuk pelatihan akselerasi hardware. Koneksi ke runtime akan terjadi secara otomatis pada eksekusi pertama, atau Anda dapat menggunakan tombol "Hubungkan" di pojok kanan atas.
Eksekusi notebook
Jalankan sel satu per satu dengan mengklik sel dan menggunakan Shift-ENTER. Anda juga dapat menjalankan seluruh notebook dengan Runtime > Jalankan semua
Daftar isi
Semua notebook memiliki daftar isi. Anda dapat membukanya menggunakan panah hitam di sebelah kiri.
Sel tersembunyi
Beberapa sel hanya akan menampilkan judulnya. Fitur ini adalah fitur notebook khusus Colab. Anda dapat mengkliknya dua kali untuk melihat kode di dalamnya, tetapi biasanya ini tidak terlalu menarik. Biasanya mendukung atau fungsi visualisasi. Anda masih harus menjalankan sel-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 diotorisasi. Cuplikan kode di atas akan memicu proses autentikasi.
3. [INFO] Pengklasifikasi jaringan neural 101
Ringkasan singkat
Jika semua istilah yang dicetak tebal di paragraf berikutnya sudah diketahui, Anda dapat melanjutkan ke latihan berikutnya. Jika Anda baru mulai mempelajari deep learning, selamat datang, dan silakan terus membaca.
Untuk model yang dibangun sebagai urutan lapisan Keras menawarkan Sequential API. Misalnya, pengklasifikasi gambar yang menggunakan tiga lapisan padat dapat ditulis dalam 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. Terdiri dari "neuron" diatur berlapis-lapis. Lapisan pertama memproses data input dan memberikan outputnya ke lapisan lain. Hal ini disebut "padat" karena setiap neuron terhubung ke semua neuron di lapisan sebelumnya.
Anda bisa memasukkan gambar ke dalam jaringan seperti itu dengan meratakan nilai RGB dari semua pikselnya menjadi vektor yang panjang dan menggunakannya sebagai input. Ini bukanlah teknik terbaik untuk pengenalan citra, tetapi kami akan meningkatkannya nanti.
Neuron, aktivasi, RELU
"neuron" menghitung jumlah tertimbang dari semua {i>input<i}-nya, menambahkan nilai yang disebut "bias" dan memberikan hasil melalui "fungsi aktivasi". Bobot dan bias pada awalnya tidak diketahui. Parameter tersebut akan diinisialisasi secara acak dan "learned" (dipelajari). dengan melatih jaringan neural pada banyak data yang diketahui.
Fungsi aktivasi yang paling populer disebut RELU untuk Unit Linear Terarah. 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 kami mengklasifikasikan bunga menjadi 5 kategori (mawar, tulip, dandelion, daisy, bunga matahari). Neuron di lapisan perantara diaktifkan menggunakan fungsi aktivasi RELU klasik. Pada lapisan terakhir, kita ingin menghitung angka antara 0 dan 1 yang mewakili probabilitas bunga ini adalah mawar, tulip, dan seterusnya. Untuk itu, kita akan menggunakan fungsi aktivasi yang disebut "softmax".
Penerapan softmax pada vektor dilakukan dengan mengambil eksponensial dari setiap elemen dan kemudian menormalisasi vektor tersebut, biasanya menggunakan norma L1 (jumlah nilai absolut) sehingga nilainya bertambah hingga 1 dan dapat diinterpretasikan sebagai probabilitas.
Kerugian entropi silang
Sekarang setelah jaringan neural kita menghasilkan prediksi dari gambar input, kita perlu mengukur seberapa bagus prediksinya, yaitu jarak antara apa yang ditunjukkan jaringan kepada kita dan jawaban yang benar, yang sering disebut "label". Ingatlah bahwa kita memiliki label yang benar untuk semua gambar dalam {i>dataset<i}.
Semua jarak dapat digunakan, tetapi untuk masalah klasifikasi, apa yang disebut "jarak entropi silang" adalah yang paling efektif. Kita akan menyebutnya {i>error<i} atau "{i>loss<i}" {i>function<i}:
Penurunan gradien
"Pelatihan" jaringan neural sebenarnya berarti menggunakan gambar dan label pelatihan untuk menyesuaikan bobot dan bias guna meminimalkan fungsi kerugian entropi silang. Begini cara kerjanya.
Entropi silang adalah fungsi bobot, bias, piksel dari gambar pelatihan dan kelasnya yang diketahui.
Jika kita menghitung turunan parsial dari entropi silang secara relatif terhadap semua bobot dan semua bias, kita memperoleh "gradien", yang dihitung untuk gambar, label, dan nilai sekarang dari bobot dan bias. Ingatlah bahwa kita dapat memiliki jutaan bobot dan bias sehingga menghitung gradien terdengar seperti pekerjaan yang berat. Untungnya, Tensorflow saja yang melakukannya untuk kita. Properti matematika dari gradien adalah bahwa gradien tersebut menunjuk "ke atas". Karena kita ingin menuju tempat yang nilai entropi silangnya rendah, kita melakukan ke arah yang berlawanan. Kita memperbarui bobot dan bias dengan menggunakan sebagian kecil dari gradien. Kemudian kita melakukan hal yang sama berulang kali menggunakan batch gambar dan label pelatihan berikutnya, dalam satu loop pelatihan. Mudah-mudahan, ini konvergensi ke tempat di mana entropi silang minimal meskipun tidak ada jaminan bahwa minimum ini unik.
Pengelompokan mini dan momentum
Anda dapat menghitung gradien hanya pada satu gambar contoh dan segera memperbarui bobot dan bias, tetapi melakukan hal ini pada sekumpulan, misalnya, 128 gambar memberikan gradien yang lebih mewakili batasan yang diberlakukan oleh gambar contoh yang berbeda dan karenanya cenderung menyatu menuju solusi lebih cepat. Ukuran tumpukan mini adalah parameter yang dapat disesuaikan.
Teknik ini, kadang-kadang disebut "penurunan gradien stokastik" memiliki manfaat lain yang lebih pragmatis: bekerja dengan batch juga berarti bekerja dengan matriks yang lebih besar dan ini biasanya lebih mudah dioptimalkan pada GPU dan TPU.
Konvergensi masih bisa sedikit kacau dan bahkan bisa berhenti jika vektor gradien semua nol. Apakah itu berarti kita telah menemukan minimum? Tidak selalu. Komponen gradien dapat bernilai nol pada nilai minimum atau maksimum. Dengan vektor gradien dengan jutaan elemen, jika semuanya bernilai nol, maka probabilitas bahwa setiap nol sesuai dengan nilai minimum dan tidak satu pun dari mereka hingga titik maksimum cukup kecil. Dalam ruang dari berbagai dimensi, saddle point cukup umum dan kita tidak ingin berhenti di sini.
Ilustrasi: titik pelana. Gradien-nya adalah 0, tetapi bukan nilai minimum di semua arah. (Atribusi gambar Wikimedia: By Nicoguaro - Own work, CC BY 3.0)
Solusinya adalah menambahkan beberapa momentum pada algoritme pengoptimalan sehingga algoritme tersebut dapat berlayar melewati titik pelana tanpa berhenti.
Glosarium
batch atau mini-batch: pelatihan selalu dilakukan pada batch data dan label pelatihan. Tindakan ini akan membantu algoritma konvergensi. "Batch" dimensi biasanya adalah dimensi pertama dari tensor data. Misalnya, tensor 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 yang setiap neuronnya terhubung ke semua neuron di lapisan sebelumnya.
features: input dari jaringan neural terkadang disebut "fitur". Seni mencari tahu bagian set data mana (atau kombinasi bagian-bagian) yang akan dimasukkan ke dalam jaringan neural untuk mendapatkan prediksi yang baik disebut "rekayasa fitur".
label: nama lain untuk "kelas" atau jawaban yang benar dalam masalah klasifikasi yang diawasi
kecepatan pembelajaran: fraksi gradien yang digunakan untuk memperbarui bobot dan bias pada setiap iterasi loop pelatihan.
logits: output dari lapisan neuron sebelum fungsi aktivasi diterapkan disebut "logits". Istilah ini berasal dari "fungsi logistik" alias "fungsi sigmoid" yang dulunya merupakan fungsi aktivasi yang paling populer. "Output neuron sebelum fungsi logistik" disingkat menjadi "logits".
kerugian: fungsi error yang membandingkan output jaringan neural dengan jawaban yang benar
neuron: menghitung jumlah input tertimbang, menambahkan bias, dan memberikan hasilnya melalui fungsi aktivasi.
enkode one-hot: kelas 3 dari 5 dienkode sebagai vektor 5 elemen, semua angka nol kecuali yang ketiga yaitu 1.
relu: unit linear terarah. Fungsi aktivasi yang populer untuk neuron.
sigmoid: fungsi aktivasi lain yang sebelumnya populer dan masih berguna dalam kasus tertentu.
softmax: fungsi aktivasi khusus yang bertindak pada vektor, meningkatkan perbedaan antara komponen terbesar dan yang lainnya, serta menormalkan vektor untuk memiliki jumlah 1 sehingga dapat ditafsirkan sebagai vektor probabilitas. Digunakan sebagai langkah terakhir dalam pengklasifikasi.
tensor: "tensor" seperti matriks tetapi dengan jumlah dimensi yang arbitrer. Tensor 1-dimensi adalah vektor. Tensor 2 dimensi adalah sebuah matriks. Dan kemudian Anda dapat memiliki tensor dengan 3, 4, 5 atau lebih dimensi.
4. Pemelajaran Transfer
Untuk masalah klasifikasi gambar, lapisan padat mungkin tidak cukup. Kita harus belajar tentang lapisan konvolusional dan berbagai cara untuk mengaturnya.
Tapi kita juga bisa mengambil jalan pintas! Ada jaringan neural konvolusional terlatih yang bisa didownload. Anda dapat memotong lapisan terakhirnya, kepala klasifikasi softmax, dan menggantinya dengan milik Anda. Semua bobot dan bias yang dilatih tetap seperti itu, Anda hanya melatih ulang lapisan softmax yang Anda tambahkan. Teknik ini disebut pemelajaran transfer dan sangat bagus, teknik ini berhasil asalkan set data tempat jaringan neural yang dilatih sebelumnya "cukup dekat" dengan milik Anda.
Langsung
Buka notebook berikut, jalankan sel (Shift-ENTER), lalu ikuti petunjuk di mana pun Anda melihat "DIPERLUKAN KERJA" label.
Keras Flowers transfer learning (playground).ipynb
Informasi tambahan
Dengan pemelajaran transfer, Anda mendapatkan manfaat dari arsitektur jaringan neural konvolusional canggih yang dikembangkan oleh peneliti top dan dari pelatihan awal pada set data gambar yang besar. Dalam kasus ini, kita akan mentransfer pemelajaran dari jaringan yang dilatih di ImageNet, yaitu database gambar yang berisi banyak tanaman dan pemandangan luar ruangan, yang cukup dekat dengan bunga.
Ilustrasi: menggunakan jaringan neural konvolusional kompleks, yang sudah dilatih, sebagai kotak hitam, melatih ulang kepala klasifikasi saja. Inilah pemelajaran transfer. Kita akan melihat bagaimana pengaturan lapisan konvolusional yang rumit ini bekerja nanti. Untuk saat ini, masalahnya ada di tangan orang lain.
Transfer pembelajaran di Keras
Di Keras, Anda dapat membuat instance model terlatih dari koleksi tf.keras.applications.*
. MobileNet V2 misalnya adalah arsitektur konvolusional yang sangat baik dengan ukuran yang tetap wajar. Dengan memilih include_top=False
, Anda mendapatkan model terlatih tanpa lapisan softmax akhirnya sehingga Anda dapat menambahkan model 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
. Fungsi ini membekukan bobot dan bias model terlatih sehingga Anda hanya melatih lapisan softmax. Proses ini biasanya melibatkan bobot yang relatif sedikit dan dapat dilakukan dengan cepat dan tanpa memerlukan {i>dataset<i} yang sangat besar. Namun, jika Anda memiliki banyak data, pemelajaran transfer dapat berfungsi 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. Itu sebabnya kita perlu meratakan. Di bab berikutnya, saat kita mempelajari arsitektur konvolusional, kita akan menjelaskan format data yang dikembalikan oleh lapisan konvolusional.
Akurasi Anda akan mendekati 75% dengan pendekatan ini.
Solusi
Berikut notebook solusinya. Anda dapat menggunakannya jika mengalami kesulitan.
Keras Flowers transfer learning (solution).ipynb
Yang telah kita bahas
- 🤔 Cara menulis pengklasifikasi di Keras
- 🤓 dikonfigurasikan dengan lapisan terakhir softmax, dan kerugian entropi silang
- 🎬 Pemelajaran transfer
- 🤔 Melatih model pertama Anda
- 🧐 Setelah kehilangan dan akurasinya selama pelatihan
Luangkan waktu sejenak untuk membaca {i>checklist<i} ini di kepala Anda.
5. Selamat!
Anda sekarang dapat membangun model Keras. Silakan lanjutkan ke lab berikutnya untuk mempelajari cara merakit lapisan konvolusional.
- Pipeline data berkecepatan TPU: tf.data.Dataset dan TFRecords
- [THIS LAB] Model Keras pertama Anda, dengan pemelajaran transfer
- Jaringan neural konvolusional, dengan Keras dan TPU
- ConvNets, SqueezeNet, Xception modern, dengan Keras dan TPU
Penggunaan TPU
TPU dan GPU tersedia di Cloud AI Platform:
- Di Deep Learning VM
- Di AI Platform Notebooks
- Dalam tugas AI Platform Training
Terakhir, kami senang menerima masukan. Beri tahu kami jika Anda melihat ada yang tidak beres di lab ini atau menurut Anda harus diperbaiki. Masukan dapat diberikan melalui masalah GitHub [link masukan].
|