Model Keras pertama Anda, dengan pemelajaran transfer

1. Ringkasan

Di lab ini, Anda akan mempelajari cara membangun pengklasifikasi Keras. Daripada mencoba mencari tahu kombinasi lapisan jaringan saraf yang sempurna untuk mengenali bunga, kita akan menggunakan teknik yang disebut transfer learning terlebih dahulu untuk menyesuaikan model terlatih yang canggih dengan set data kita.

Lab ini mencakup penjelasan teoretis yang diperlukan tentang jaringan saraf 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.

ca8cc21f6838eccc.png

Yang akan Anda pelajari

  • Untuk membuat pengklasifikasi gambar Keras Anda sendiri dengan lapisan softmax dan cross-entropy loss
  • Untuk menipu 🎬, menggunakan pemelajaran transfer, bukan membangun model Anda sendiri.

Masukan

Jika Anda melihat sesuatu yang salah dalam codelab ini, beri tahu kami. Masukan dapat diberikan melalui masalah GitHub [ link masukan].

2. Mulai cepat Google Colaboratory

Lab ini menggunakan Kolaborasi Google dan tidak memerlukan penyiapan dari Anda. Colaboratory adalah platform notebook online untuk tujuan pendidikan. Layanan ini menawarkan pelatihan CPU, GPU, dan TPU gratis.

688858c21e3beff2.png

Anda dapat membuka notebook contoh ini dan menjalankan beberapa sel untuk membiasakan diri dengan Colaboratory.

c3df49e90e5a654f.png Welcome to Colab.ipynb

Memilih backend TPU

8832c6208c99687d.png

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 "Connect" di pojok kanan atas.

Eksekusi notebook

76d05caa8b4db6da.png

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

Daftar isi

429f106990037ec4.pngS

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

Sel tersembunyi

edc3dba45d26f12a.png

Beberapa sel hanya akan menampilkan judulnya. 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 perlu menjalankan sel ini agar fungsi di dalamnya dapat ditentukan.

Autentikasi

cdd4b41413100543.png

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

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 lanjutkan membaca.

Untuk model yang dibuat sebagai urutan lapisan, Keras menawarkan Sequential API. Misalnya, pengklasifikasi gambar yang menggunakan tiga lapisan rapat 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, ... )

688858c21e3beff2.pngS

Jaringan neural rapat

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

c21bae6dade487bc.png

Anda dapat memasukkan gambar ke dalam jaringan tersebut dengan meratakan nilai RGB dari semua pikselnya menjadi vektor panjang dan menggunakannya sebagai input. Ini bukanlah teknik terbaik untuk pengenalan citra, tetapi kami akan meningkatkannya nanti.

Neuron, aktivasi, RELU

"Neuron" menghitung jumlah berbobot dari semua inputnya, menambahkan nilai yang disebut "bias", dan memasukkan hasilnya melalui "fungsi aktivasi". Bobot dan bias pada awalnya tidak diketahui. Parameter ini akan diinisialisasi secara acak dan "dipelajari" dengan melatih jaringan neural pada banyak data yang diketahui.

644f4213a4ee70e5.png

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.

Aktifasi 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. Namun, di lapisan terakhir, kita ingin menghitung angka antara 0 dan 1 yang mewakili probabilitas bunga ini adalah mawar, tulip, dan sebagainya. Untuk itu, kita akan menggunakan fungsi aktivasi yang disebut "softmax".

Penerapan softmax pada vektor dilakukan dengan mengambil eksponensial dari setiap elemen, lalu menormalisasi vektor, biasanya menggunakan norma L1 (jumlah nilai absolut) sehingga nilainya berjumlah 1 dan dapat ditafsirkan sebagai probabilitas.

ef0d98c0952c262d.png d51252f75894479e.gif

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}.

Jarak apa pun akan berfungsi, tetapi untuk masalah klasifikasi, "jarak entropi silang" adalah yang paling efektif. Kita akan menyebutnya error atau fungsi "kerugian":

7bdf8753d20617fb.png

Penurunan gradien

"Melatih" jaringan saraf sebenarnya berarti menggunakan gambar dan label pelatihan untuk menyesuaikan bobot dan bias sehingga meminimalkan fungsi loss cross-entropy. Begini cara kerjanya.

Entropi silang adalah fungsi bobot, bias, piksel dari gambar pelatihan dan kelasnya yang diketahui.

Jika kita menghitung turunan parsial entropi silang secara relatif terhadap semua bobot dan semua bias, kita akan mendapatkan "gradien", yang dihitung untuk gambar, label, dan nilai bobot dan bias tertentu. Ingat bahwa kita dapat memiliki jutaan bobot dan bias sehingga menghitung gradien terdengar seperti banyak pekerjaan. 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. Semoga, hal ini akan konvergen ke tempat cross-entropy minimal meskipun tidak ada yang menjamin bahwa minimum ini unik.

gradient descent2.png

Pengelompokan mini dan momentum

Anda dapat menghitung gradien hanya pada satu gambar contoh dan segera memperbarui bobot dan bias, tetapi melakukan hal ini pada satu batch, 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 mini-batch 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.

Namun, 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 berupa nol pada 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.

52e824fe4716c4a0.png

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 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. Dimensi "batch" biasanya merupakan dimensi pertama dari 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 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 belajar: 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" atau "fungsi sigmoid" yang dulunya merupakan fungsi aktivasi paling populer. "Output neuron sebelum fungsi logistik" disingkat menjadi "logits".

loss: fungsi error yang membandingkan output jaringan saraf dengan jawaban yang benar

neuron: menghitung jumlah berbobot dari inputnya, menambahkan bias, dan memasukkan hasilnya melalui fungsi aktivasi.

Encoding one-hot: class 3 dari 5 dienkode sebagai vektor 5 elemen, semua nol kecuali elemen ke-3 yang bernilai 1.

relu: unit linear terarah. Fungsi aktivasi populer untuk neuron.

sigmoid: fungsi aktivasi lain yang dulunya populer dan masih berguna dalam kasus khusus.

softmax: fungsi aktivasi khusus yang bekerja pada vektor, meningkatkan perbedaan antara komponen terbesar dan semua komponen lainnya, dan juga menormalisasi vektor agar memiliki jumlah 1 sehingga dapat ditafsirkan sebagai vektor probabilitas. Digunakan sebagai langkah terakhir dalam pengklasifikasi.

tensor: "Tensor" mirip dengan matriks, tetapi dengan jumlah dimensi yang arbitrer. Tensor 1-dimensi adalah vektor. Tensor 2-dimensi adalah matriks. 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 mempelajari lapisan konvolusional dan banyaknya 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 semula, Anda hanya melatih ulang lapisan softmax yang ditambahkan. Teknik ini disebut pemelajaran transfer dan luar biasa, teknik ini bekerja selama {i>dataset<i} tempat jaringan neural yang dilatih sebelumnya "cukup dekat" dengan milik Anda.

Langsung

Buka notebook berikut, jalankan sel (Shift-ENTER), dan ikuti petunjuk di mana pun Anda melihat label "KERJA DIPERLUKAN".

c3df49e90e5a654f.png 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.

b8fc1efd2001f072.png

Ilustrasi: menggunakan jaringan neural konvolusional kompleks, yang sudah dilatih, sebagai kotak hitam, melatih ulang kepala klasifikasi saja. Inilah pemelajaran transfer. Kita akan melihat cara kerja pengaturan lapisan konvolusi yang rumit ini 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.*. Misalnya, MobileNet V2 adalah arsitektur konvolusi yang sangat baik dan ukurannya tetap wajar. Dengan memilih include_top=False, Anda akan mendapatkan model terlatih tanpa lapisan softmax terakhirnya sehingga Anda dapat menambahkan lapisan softmax 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 serta 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 padu berfungsi pada vektor data datar, tetapi kita tidak tahu apakah itu yang ditampilkan oleh model terlatih. Itulah sebabnya kita perlu meratakan. Di bab berikutnya, saat mempelajari arsitektur convolutional, kita akan menjelaskan format data yang ditampilkan oleh lapisan convolutional.

Akurasi Anda akan mendekati 75% dengan pendekatan ini.

Solusi

Berikut adalah notebook solusinya. Anda dapat menggunakannya jika mengalami masalah.

c3df49e90e5a654f.png Keras Flowers transfer learning (solution).ipynb

Yang telah kita bahas

  • 🤔 Cara menulis pengklasifikasi di Keras
  • 🤓 dikonfigurasi dengan lapisan terakhir softmax, dan loss entropi silang
  • 📈 Pemelajaran transfer
  • 🤔 Melatih model pertama Anda
  • 🧐 Memantau kerugian dan akurasinya selama pelatihan

Luangkan waktu sejenak untuk mengingat checklist ini.

5. Selamat!

Sekarang Anda dapat mem-build model Keras. Silakan lanjutkan ke lab berikutnya untuk mempelajari cara merakit lapisan konvolusional.

TPU dalam praktik

TPU dan GPU tersedia di Cloud AI Platform:

Terakhir, kami senang menerima masukan. Beri tahu kami jika Anda melihat ada yang tidak beres di lab ini atau jika menurut Anda ada yang perlu ditingkatkan. Masukan dapat diberikan melalui masalah GitHub [link masukan].

HR.png

Martin Görner ID small.jpg
Penulis: Martin Görner
Twitter: @martin_gorner

tensorflow logo.jpg
www.tensorflow.org