Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami

Node Sumber: 1582446

Jika Anda sempat membaca Bagian 1 artikel ini, Anda pasti ingat bahwa Transfer Learning adalah metode pembelajaran mesin di mana penerapan pengetahuan yang diperoleh dari model yang digunakan dalam satu tugas, dapat digunakan kembali sebagai titik dasar untuk tugas lain.

Jika Anda tidak mendapatkan kesempatan dan tidak memiliki pemahaman yang baik tentang Transfer Learning, bacalah itu akan membantu Anda memahami artikel ini dengan lebih baik. 

Pengenalan Gambar

 
Jadi pertama-tama mari kita lihat apa itu Pengenalan Gambar. Pengenalan Gambar adalah tugas yang diberikan kepada teknologi komputer untuk dapat mendeteksi dan menganalisis suatu objek atau fitur dalam suatu gambar atau video. Ini adalah area utama di mana jaringan saraf dalam melakukan keajaiban mereka karena dirancang untuk mengenali pola. 

Jika Anda ingin melihat bagaimana jaringan saraf menganalisis dan memahami pemahaman mereka tentang gambar, lihatlah di sini. Ini menunjukkan kepada Anda bagaimana lapisan tingkat yang lebih rendah berkonsentrasi untuk mempelajari fitur tingkat rendah dan bagaimana lapisan tingkat yang lebih tinggi beradaptasi untuk mempelajari fitur tingkat yang lebih tinggi.

Kami samar-samar berbicara tentang melatih jaringan pada kucing dan anjing di bagian 1 artikel ini, mari kita bicara lebih banyak tentang itu. Otak manusia dapat mengenali dan membedakan perbedaan antar objek. Pengenalan citra bertujuan juga memiliki kemampuan yang mirip dengan otak manusia, juga mampu mengidentifikasi dan mendeteksi perbedaan antar objek dalam suatu citra. 

Algoritma yang digunakan oleh pengenalan gambar adalah pengklasifikasi gambar yang menerima gambar input dan mengeluarkan apa yang terkandung dalam gambar. Algoritma ini harus dilatih untuk mempelajari perbedaan antara objek yang dideteksi. Untuk pengklasifikasi gambar untuk mengidentifikasi kucing dan anjing, pengklasifikasi gambar perlu dilatih dengan ribuan gambar kucing dan anjing beserta gambar yang juga tidak mengandung kucing dan anjing. Oleh karena itu data yang diperoleh dari pengklasifikasi gambar ini kemudian dapat diimplementasikan dan digunakan dalam pendeteksian kucing dan anjing dalam tugas-tugas lainnya. 

Jadi di mana Anda dapat menemukan model gambar yang telah dilatih sebelumnya?

 
Ada banyak model pra-terlatih di luar sana, jadi menemukan yang tepat untuk memecahkan masalah Anda akan memerlukan sedikit riset. Saya akan melakukan sedikit riset untuk Anda. Saya akan mulai dengan berbicara tentang Keras. Keras menawarkan berbagai model pra-terlatih yang dapat digunakan untuk pembelajaran transfer, ekstraksi fitur, fine-tuning, dan prediksi. Anda dapat menemukan daftarnya di sini.

Contoh aplikasi Keras adalah arsitektur Xception, yang saya bicarakan secara singkat lebih lanjut. Ini adalah bagaimana Anda dapat menginisialisasi Xception di ImageNet.

tf.keras.applications.Xception( include_top=True, weights="imagenet", input_tensor=None, input_shape=None, pooling=None, class=1000, classifier_activation="softmax", )

Saat kita berbicara tentang Keras, jangan lupakan TensorFlow Hub. TensorFlow adalah library open-source yang dikembangkan oleh Google, yang mendukung machine learning dan deep learning. TensorFlow Hub memiliki berbagai model yang telah dilatih sebelumnya dan siap diterapkan seperti klasifikasi gambar, teks, video, dan audio. 

Model Sequential baik digunakan untuk tumpukan lapisan biasa, ini berarti ketika setiap lapisan memiliki satu input dan satu tensor output. 

Contoh 1:

model = tf.keras.Sequential([ embed, tf.keras.layers.Dense(16, aktivasi="relu"), tf.keras.layers.Dense(1, aktivasi="sigmoid"), ])

Contoh 2:

m = tf.keras.Sequential([ hub.KerasLayer("https://tfhub.dev/google/imagenet/inception_v1/classification/5") ]) m.build([Tidak ada, 224, 224, 3]) # Bentuk masukan batch.

Dalam pembelajaran yang mendalam, beberapa strategi dapat memungkinkan seseorang untuk mendapatkan manfaat maksimal dari model pra-terlatih. 
 
 

Ekstraksi Fitur

 
Strategi pertama yang akan saya bicarakan adalah Ekstraksi Fitur. Anda pada dasarnya menjalankan model pra-terlatih sebagai ekstraktor fitur tetap, menggunakan fitur yang diinginkan untuk melatih pengklasifikasi baru. Lapisan konvolusional yang lebih dekat ke lapisan input model mempelajari fitur tingkat rendah seperti tepi dan garis dalam pengenalan gambar. Seiring berjalannya lapisan, mereka mulai mempelajari fitur yang lebih kompleks untuk kemudian pada akhirnya dapat menginterpretasikan fitur spesifik lebih dekat ke output, yang merupakan tugas klasifikasi yang ada. Kita dapat menggunakan tingkat lapisan yang berbeda sebagai integrasi ekstraksi fitur terpisah dengan menggunakan bagian dari model untuk mengklasifikasikan tugas kita. 

Misalnya, jika tugas berbeda dengan mengklasifikasikan objek dalam gambar yang dilakukan oleh model yang telah dilatih sebelumnya, menggunakan output setelah model yang telah dilatih sebelumnya melewati beberapa lapisan akan lebih tepat. Oleh karena itu, keluaran baru dari lapisan yang diinginkan akan diumpankan sebagai masukan ke model baru yang telah memperoleh fitur penting untuk masuk ke pengklasifikasi baru dan dapat menyelesaikan tugas yang ada. 

Secara keseluruhan, idenya adalah untuk memanfaatkan model pra-terlatih menggunakan ekstraksi fitur untuk menentukan fitur mana yang berguna untuk menyelesaikan tugas Anda, tetapi Anda tidak akan menggunakan output jaringan karena terlalu spesifik untuk tugas. Anda kemudian harus membangun bagian terakhir dari model agar spesifik untuk tugas Anda. 

Mencari setelan

 
Strategi kedua adalah Fine-tuning, atau yang saya sebut operasi jaringan. Kami berbicara tentang Fine-tuning di atas, di mana itu dibangun untuk membuat penyesuaian "halus" pada suatu proses untuk mendapatkan output yang diinginkan untuk lebih meningkatkan kinerja. Penyesuaian halus juga dilihat sebagai langkah lebih lanjut ke Ekstraksi Fitur. Dalam fine-tuning kami membekukan lapisan tertentu dan secara selektif melatih ulang beberapa untuk meningkatkan akurasinya, mendapatkan kinerja yang lebih tinggi pada tingkat pembelajaran yang lebih rendah dan membutuhkan lebih sedikit waktu pelatihan. 

Penyesuaian yang tepat sangat penting jika Anda ingin dapat memperoleh representasi fitur yang efisien dari model dasar, sehingga lebih memenuhi tugas Anda. 

Contoh: Cara menggunakan model gambar yang telah dilatih sebelumnya di Keras

 
Jadi sekarang mari kita lihat sebuah contoh. Karena kita telah berbicara banyak tentang kucing dan anjing, mari kita lakukan contoh pengenalan gambar pada mereka. 

Muat datanya

 
Jadi pertama-tama pastikan kita mengimpor perpustakaan yang kita butuhkan dan memuat Data.

impor numpy sebagai np impor tensorflow sebagai tf dari tensorflow impor keras impor tensorflow_datasets sebagai tfds

Itu selalu baik untuk mencetak ukuran sampel Anda untuk pelatihan dan pengujian Anda untuk memahami berapa banyak data yang Anda kerjakan dan melihat gambarnya, sehingga Anda dapat melihat data apa yang sedang Anda kerjakan. 

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Karena ukuran gambar yang bervariasi, ini adalah pendekatan yang baik untuk menstandarisasi ukuran gambar tetap, karena ini merupakan masukan konsisten yang baik untuk jaringan saraf. 

Pra-pemrosesan data

 
Sekarang mari kita masuk ke Data Augmentation. Saat bekerja dengan kumpulan data yang lebih kecil, praktik yang baik adalah menerapkan transformasi acak ke gambar pelatihan, seperti membalik horizontal. Membalik berarti memutar gambar pada sumbu vertikal atau horizontal. Ini akan membantu mengekspos model ke berbagai sudut dan aspek data pelatihan, mengurangi overfitting. 

dari tensorflow import keras from tensorflow.keras import layers data_augmentation = keras.Sequential( [layers.RandomFlip("horizontal"), layers.RandomRotation(0.1),] )

Membuat base_model dari arsitektur yang dipilih (Xception)

 
Langkah selanjutnya adalah membuat model. Pertama-tama kita akan mulai dengan membuat instance model dasar, *ception, dan memuat beban yang telah dilatih sebelumnya ke dalamnya. Dalam contoh ini, kami menggunakan ImageNet. Kami kemudian beralih ke pembekuan semua lapisan dalam model dasar. Pembekuan membantu mencegah bobot diperbarui selama pelatihan.

base_model = keras.applications.Xception( weights="imagenet", # Bobot dilatih sebelumnya di ImageNet.input_shape=(150, 150, 3), include_top=False, ) base_model.trainable = False

Latih lapisan atas

 
Langkah selanjutnya adalah membuat layer baru di atas lapisan beku, yang akan mempelajari pengetahuannya tentang fitur lama dan menggunakannya untuk menentukan prediksi pada dataset baru. Ini bermanfaat seperti yang dijelaskan lebih lanjut dalam langkah-langkah pembelajaran transfer, kemungkinan bahwa keluaran saat ini pada model pra-latihan dan keluaran yang Anda inginkan dari model Anda akan berbeda tinggi, oleh karena itu menambahkan lapisan baru akan meningkatkan model secara keseluruhan. 

# Buat model baru di input atas = keras.Input(shape=(150, 150, 3)) x = data_augmentation(input) # Terapkan augmentasi data acak


 

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Mencari setelan

 
Jadi setelah kita menjalankan model dengan lapisan beku, kita perlu menjalankan model dengan model dasar yang tidak dibekukan, yang pada dasarnya meningkatkan model, dengan tingkat pembelajaran yang lebih rendah. Anda ingin mengurangi jumlah overfitting, jadi mari kita lakukan langkah ini secara perlahan dan mencairkan model dasarnya.

base_model.trainable = Benar

Sekarang saatnya untuk mengkompilasi model lagi.

model.kompilasi( pengoptimal=keras.optimizers.Adam(1e-5), # Tingkat pembelajaran rendah loss=keras.losses.BinaryCrossentropy(from_logits=True), metrik=[keras.metrics.BinaryAccuracy()], ) zaman = 10 model.fit(train_ds, zaman=zaman, validasi_data=validasi_ds)

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Jika Anda ingin melihat lebih jauh, Anda dapat melakukannya dengan mengklik di sini untuk melihat buku catatan Colab. 
 
 

Pengolahan Bahasa alami

 
Kami telah berbicara sedikit tentang klasifikasi gambar, sekarang mari kita lihat Natural Language Processing (NLP). Jadi apa itu NLP? NLP adalah kemampuan komputer untuk dapat mendeteksi dan memahami bahasa manusia, melalui ucapan dan teks seperti yang kita lakukan sebagai manusia. 

Bahasa manusia mengandung banyak ambiguitas yang menyebabkan kesulitan untuk dapat membuat perangkat lunak yang dapat mendeteksi ucapan dan teks secara akurat. Misalnya, sarkasme, tata bahasa, dan homofon, bagaimanapun, ini hanyalah beberapa hambatan dalam mempelajari bahasa manusia. 

Contoh NLP adalah Speech Recognition dan Sentiment Analysis. Kasus penggunaan NLP adalah hal-hal seperti deteksi spam. Saya tahu, Anda mungkin tidak pernah berpikir NLP diimplementasikan ke dalam deteksi spam, tetapi memang demikian. Klasifikasi teks NLP memiliki kemampuan untuk memindai email dan mendeteksi bahasa yang mengindikasikan bahwa itu mungkin spam atau phishing. Ini dilakukan dengan menganalisis penggunaan tata bahasa yang buruk, ancaman, penggunaan terminologi keuangan yang berlebihan, dan banyak lagi. 

Jadi bagaimana cara kerja Transfer Learning di NLP? Yah, pada dasarnya bekerja sama dengan Image Recognition. Pelatihan model bahasa alami bisa sangat mahal harganya, membutuhkan banyak data dan menghabiskan banyak waktu pelatihan pada perangkat keras mewah. Namun kabar baiknya adalah, seperti halnya pengenalan gambar, Anda dapat mengunduh model pra-latihan ini secara gratis bersama dengan menyempurnakannya agar berfungsi pada kumpulan data spesifik Anda.

Di mana Anda dapat menemukan model pra-terlatih ini, Anda bertanya? 

 
Keras tidak hanya menawarkan model pra-terlatih untuk pengenalan gambar, tetapi juga menyediakan arsitektur untuk NLP. Anda dapat melihat-lihat di sini

MemelukWajah

 
Mari kita lihat MemelukWajah. HuggingFace adalah penyedia pemrosesan bahasa alami (NLP) sumber terbuka yang telah melakukan pekerjaan luar biasa untuk membuatnya ramah pengguna. 

Pustaka Transformers mereka adalah pustaka berbasis python yang menyediakan arsitektur seperti BERT, yang melakukan tugas NLP seperti klasifikasi teks dan penjawab pertanyaan. Yang harus Anda lakukan adalah memuat model pra-latihan mereka hanya dengan beberapa baris kode dan Anda siap untuk mulai bereksperimen. Untuk memulai Transformers, Anda harus menginstalnya.

Di bawah ini adalah contoh penggunaan analisis sentimen, yaitu kemampuan untuk dapat mengidentifikasi opini yang diungkapkan dalam sebuah teks.

! pip install transformers from transformers import pipeline classifier = pipeline('sentiment-analysis') classifier('Saya menemukan artikel tentang pembelajaran Transfer sangat berguna.')

Keluaran:

[{'label': 'POSITIVE', 'score': 0.9968850016593933}]

Meningkatkan model terlatih Anda dengan penyetelan halus adalah opsi dengan HuggingFace, menggunakan Trainer API. Transformers memberikan kelas Trainer yang membantu menyempurnakan model pra-latihan Anda. Langkah ini muncul setelah memproses data Anda dan mengharuskan Anda mengimpor TrainingArguments

dari transformer impor TrainingArguments

Untuk mengetahui lebih lanjut tentang HuggingFace, Anda dapat mengikuti ini link

Penyematan Kata

 
Bagaimana dengan Penyematan Kata? Apa itu? Penyisipan kata adalah representasi di mana kata-kata serupa memiliki pengkodean yang serupa. Itu dapat mendeteksi sebuah kata dalam dokumen dan menghubungkan hubungannya dengan kata lain. 

Contohnya adalah Word2Vec, yang merupakan jaringan saraf dua lapis yang memproses teks dengan pengkodean vektor. 

Word2Vec menggunakan dua metode untuk mempelajari representasi kata:

  1. Bag-of-Words terus menerus – adalah arsitektur model yang mencoba memprediksi kata target (kata tengah) berdasarkan kata sumber (kata tetangga). Urutan kata dalam konteks belum tentu penting, alasan arsitekturnya disebut 'bag-of-words
  2. Lewati-gram terus menerus – adalah arsitektur model yang pada dasarnya kebalikan dari Bag-of-Words. Ini mencoba untuk memprediksi kata sumber (kata tetangga) yang diberikan kata target (kata tengah)

Ekstraksi fitur adalah strategi yang digunakan di Word Embedding, di mana ia mendeteksi dan menghasilkan representasi fitur yang berguna untuk jenis tugas NLP yang Anda coba kerjakan. Dalam ekstraksi ciri, bagian (kalimat atau kata) diekstraksi ke dalam matriks yang memiliki representasi dari setiap kata yang diberikan dari setiap kata. Bobot tidak berubah dan hanya lapisan atas model yang digunakan. 

Namun, fine-tuning mengubah bobot model pra-terlatih, yang dapat merugikan karena metode ini dapat menyebabkan hilangnya kata-kata dalam fase penyesuaian, karena bobot yang diubah dan apa yang pernah dipelajari, tidak lagi ada dalam memori. . Ini dikenal sebagai 'gangguan bencana'. 

Contoh: Cara menggunakan model NLP yang telah dilatih sebelumnya di Keras

 
Kami baru saja berbicara di Word Embedding, jadi mari kita lihat sebuah contoh. Untuk dengan cepat merekap apa itu Penyematan Kata: itu adalah representasi di mana kata-kata serupa memiliki penyandian yang serupa. Itu dapat mendeteksi sebuah kata dalam dokumen dan menghubungkan hubungannya dengan kata lain. Jadi mari kita lihat bagaimana ini bekerja.

Muat Data

 
Dalam contoh ini, kita akan melihat ulasan film. Jika Anda ingat contoh yang kami lakukan di atas, dengan menggunakan analisis sentimen, kami menghasilkan output yang menentukan seberapa positifnya. Dengan ulasan film ini, kami memiliki positif dan negatif, oleh karena itu ini adalah klasifikasi biner. 

url = "https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz" dataset = tf.keras.utils.get_file("aclImdb_v1.tar.gz", url, untar=True, cache_dir='.', cache_subdir='') dataset_dir = os.path.join(os.path.dirname(dataset), 'aclImdb') os.listdir(dataset_dir)

Anda dapat melihat perbedaan pada gambar di bawah ini, 0 negatif dan 1 positif.

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Saya kemudian beralih menggunakan Embedding Layer dari Keras, untuk mengubah bilangan bulat positif menjadi vektor padat dengan ukuran tetap. Bobot untuk embedding diinisialisasi secara acak dan disesuaikan selama backpropagation. Setelah pengetahuan dipelajari, penyisipan kata akan mengkodekan kesamaan antara kata-kata yang telah mereka pelajari dan kata-kata yang telah mereka pelajari sebelumnya.

# Tanamkan kosakata 1,000 kata ke dalam 5 dimensi. embedding_layer = tf.keras.layers.Ebedding(1000, 5)

Pra-pemrosesan teks

 
Selama tahap pra-pemrosesan teks, kita akan menginisialisasi layer TextVectorization dengan parameter yang diinginkan untuk membuat vektor ulasan film. Lapisan vektorisasi teks akan membantu memisahkan dan memetakan string dari ulasan film menjadi bilangan bulat. 

# lapisan vektorisasi teks untuk dipisah, dan memetakan string ke bilangan bulat. vectorize_layer = TextVectorization( standardize=custom_standardization, max_tokens=vocab_size, output_mode='int', output_sequence_length=sequence_length)

Buat model

 
Vectorize_layer dari pra-pemrosesan di atas akan diimplementasikan sebagai lapisan pertama ke dalam model, karena telah mengubah string menjadi indeks kosakata. Ini akan memberi makan string yang diubah ke dalam lapisan Embedding. 

Lapisan Embedding kemudian mengambil indeks kosakata ini dan memindai melalui vektor untuk setiap indeks kata, di mana mereka belajar sebagai model kereta. 

model = Sequential([ vectorize_layer, Embedding(vocab_size, embedding_dim, name="embedding"), GlobalAveragePooling1D(), Dense(16, activation='relu'), Dense(1) ])

Dalam contoh ini, kita akan menggunakan Papan Tensor, yang merupakan alat untuk menyediakan visualisasi yang menunjukkan alur kerja machine learning, misalnya kehilangan dan akurasi. 

Kompilasi Modelnya

 
Kami akan mengkompilasi model menggunakan pengoptimal Adam dan kerugian BinaryCrossentropy.

model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Saya menyebutkan TensorBoard, yang memvisualisasikan metrik model dan Anda dapat melihatnya di bawah.

Transfer Pembelajaran untuk Pengenalan Gambar dan Pemrosesan Bahasa Alami
 

Anda telah melihat cara melatih dan menguji model NLP menggunakan model penyisipan kata yang telah dilatih sebelumnya. Jika Anda ingin melihat lebih jauh notebook Colab, Anda dapat melakukannya sini. 
 
 

Apa praktik terbaik dengan pembelajaran transfer?

  1. Model pra-terlatih – Manfaatkan model sumber terbuka pra-terlatih ini yang dapat membantu Anda menyelesaikan tugas target karena mencakup berbagai bidang. Ini dapat menghemat banyak waktu untuk membangun model dari awal.
  2. Model sumber – Menemukan model yang kompatibel dengan tugas sumber dan tugas target Anda adalah penting. Jika model sumber Anda terlalu jauh dari target Anda dan sedikit pengetahuan yang dapat ditransfer, itu akan lebih memakan waktu karena model target akan memakan waktu lebih lama untuk dicapai. 
  3. overfitting – Menargetkan tugas dengan sampel data kecil, di mana tugas sumber dan tugas target terlalu mirip, hal ini dapat menyebabkan overfitting. Membekukan lapisan dan menyetel kecepatan pembelajaran dalam model kursus dapat membantu Anda mengurangi overfitting pada model Anda. 

Saya harap artikel ini memberi Anda pemahaman yang lebih baik tentang bagaimana menerapkan pembelajaran transfer melalui jenis Pembelajaran Mesin. Cobalah sendiri!

 
 
Nisa Arya adalah seorang Ilmuwan Data dan penulis Teknis lepas. Dia sangat tertarik untuk memberikan saran atau tutorial karir Ilmu Data dan pengetahuan berbasis teori seputar Ilmu Data. Dia juga ingin mengeksplorasi berbagai cara Kecerdasan Buatan dapat bermanfaat bagi umur panjang kehidupan manusia. Seorang pembelajar yang tajam, berusaha untuk memperluas pengetahuan teknologi dan keterampilan menulisnya, sambil membantu membimbing orang lain.

Sumber: https://www.kdnuggets.com/2022/01/transfer-learning-image-recognition-natural-language-processing.html

Stempel Waktu:

Lebih dari KDnugget