Buku "Pembelajaran Mesin dan TensorFlow"

gambar Berkenalan dengan pembelajaran mesin dan perpustakaan TensorFlow mirip dengan pelajaran pertama di sekolah mengemudi, ketika Anda menderita parkir paralel, cobalah untuk menggeser gigi pada waktu yang tepat dan tidak mencampur cermin, dengan panik mengingat urutan tindakan, sementara kaki Anda dengan gugup gemetar pada pedal gas. Ini adalah latihan yang sulit tetapi perlu. Jadi dalam pembelajaran mesin: sebelum menggunakan sistem pengenalan wajah modern atau algoritma peramalan di pasar saham, Anda harus berurusan dengan alat yang sesuai dan serangkaian instruksi untuk kemudian membuat sistem Anda sendiri tanpa masalah.

Para pemula dalam pembelajaran mesin akan menghargai orientasi terapan buku ini, karena tujuannya adalah untuk memperkenalkan dasar-dasar, kemudian dengan cepat turun untuk memecahkan masalah nyata. Dari ulasan konsep pembelajaran mesin dan prinsip-prinsip bekerja dengan TensorFlow, Anda akan beralih ke algoritma dasar, mempelajari jaringan saraf dan dapat secara mandiri menyelesaikan masalah klasifikasi, pengelompokan, regresi, dan peramalan.

Kutipan. Jaringan Saraf Konvolusional


Berbelanja di toko setelah hari yang melelahkan adalah tugas yang sangat berat. Mata saya diserang oleh terlalu banyak informasi. Penjualan, kupon, berbagai warna, anak-anak kecil, lampu berkelap-kelip, dan lorong-lorong yang dipenuhi orang - ini hanya beberapa contoh dari semua sinyal yang dikirim ke korteks visual otak, terlepas dari apakah saya ingin atau tidak ingin memperhatikannya. Sistem visual menyerap banyak informasi.

Tentunya Anda tahu ungkapan "lebih baik melihat sekali daripada mendengar seratus kali." Ini mungkin benar untuk Anda dan saya (yaitu, untuk orang-orang), tetapi dapatkah mesin menemukan makna dalam gambar? Fotoreseptor visual kita memilih panjang gelombang cahaya, tetapi informasi ini, tampaknya, tidak meluas ke kesadaran kita. Pada akhirnya, saya tidak bisa mengatakan dengan tepat berapa panjang gelombang cahaya yang saya amati. Dengan cara yang sama, kamera menerima piksel gambar. Tetapi kami ingin menerima sesuatu dari level yang lebih tinggi, misalnya nama atau posisi objek. Bagaimana kita mendapatkan informasi yang dirasakan pada tingkat manusia dari piksel?

Untuk mendapatkan makna tertentu dari sumber data, akan perlu untuk merancang model jaringan saraf. Dalam bab-bab sebelumnya, beberapa jenis model jaringan saraf diperkenalkan, seperti model yang sepenuhnya terhubung (bab 8) dan auto-encoders (bab 7). Dalam bab ini, kami akan memperkenalkan model model lain yang disebut convolutional neural network (CNN). Model ini berfungsi baik dengan gambar dan data sensorik lainnya seperti suara. Misalnya, model CNN dapat dengan andal mengklasifikasikan objek mana yang ditampilkan dalam gambar.

Model CNN, yang akan dibahas dalam bab ini, akan dilatih untuk mengklasifikasikan gambar ke dalam salah satu dari 10 kategori yang mungkin. Dalam hal ini, "gambar lebih baik daripada hanya satu kata," karena kami hanya memiliki 10 opsi yang memungkinkan. Ini adalah langkah kecil menuju persepsi pada tingkat manusia, tetapi kita harus mulai dengan sesuatu, bukan?

9.1. Kerugian dari Jaringan Saraf Tiruan


Pembelajaran mesin adalah perjuangan abadi untuk pengembangan model yang akan memiliki ekspresifitas yang cukup untuk menyajikan data, tetapi pada saat yang sama tidak begitu universal sehingga perlu pelatihan ulang dan menghafal pola. Jaringan saraf ditawarkan sebagai cara untuk meningkatkan ekspresif; meskipun, seperti yang Anda duga, mereka sangat menderita dari perangkap pelatihan ulang.

CATATAN Pelatihan ulang terjadi ketika model terlatih sangat akurat pada dataset pelatihan dan buruk pada dataset validasi. Model ini mungkin terlalu universal untuk sejumlah kecil data yang tersedia, dan pada akhirnya hanya mengingat data pelatihan.

Untuk membandingkan keserbagunaan dari dua model pembelajaran mesin, Anda dapat menggunakan algoritma heuristik cepat dan kasar untuk menghitung jumlah parameter yang perlu ditentukan sebagai hasil pelatihan. Seperti yang ditunjukkan pada gambar. 9.1, jaringan saraf yang terhubung penuh yang mengambil gambar 256 Γ— 256 dan memetakannya ke lapisan 10 neuron akan memiliki 256 Γ— 256 Γ— 10 = 655.360 parameter! Bandingkan dengan model yang hanya berisi lima parameter. Dapat diasumsikan bahwa jaringan saraf yang terhubung penuh dapat menyajikan data yang lebih kompleks daripada model lima parameter.

gambar

Bagian berikutnya membahas jaringan saraf convolutional, yang merupakan cara yang masuk akal untuk mengurangi jumlah parameter. Alih-alih berurusan dengan jaringan yang sepenuhnya terhubung, CNN menggunakan kembali parameter yang sama berulang kali.

9.2. Jaringan Saraf Konvolusional


Gagasan utama yang mendasari jaringan saraf convolutional adalah bahwa pemahaman lokal tentang gambar sudah cukup. Keuntungan praktis dari jaringan saraf convolutional adalah bahwa, dengan beberapa parameter, dimungkinkan untuk secara signifikan mengurangi waktu pelatihan, serta jumlah data yang diperlukan untuk melatih model.

Alih-alih jaringan yang sepenuhnya terhubung dengan bobot dari setiap piksel, CNN memiliki jumlah bobot yang cukup yang diperlukan untuk melihat sebagian kecil gambar. Ini seperti membaca buku dengan kaca pembesar: pada akhirnya, Anda membaca seluruh halaman, tetapi pada waktu tertentu, hanya melihat sebagian kecil saja.

Bayangkan gambar 256 Γ— 256. Alih-alih menggunakan kode TensorFlow yang memproses seluruh gambar sekaligus, Anda dapat memindai fragmen gambar dengan fragmen, katakanlah, jendela 5 Γ— 5. Jendela 5 Γ— 5 meluncur di atas gambar (biasanya dari kiri ke kanan dan dari atas ke bawah), seperti ditunjukkan dalam gambar. 9.2. Seberapa "cepat" slide itu disebut langkah panjang. Sebagai contoh, panjang langkah 2 berarti bahwa jendela geser 5 Γ— 5 bergerak 2 piksel pada satu waktu sampai seluruh gambar berlalu. Di TensorFlow, seperti yang akan ditampilkan segera, Anda dapat menyesuaikan panjang langkah dan ukuran jendela menggunakan fungsi perpustakaan yang sudah ada.

gambar

Jendela 5 Γ— 5 ini memiliki matriks berat 5 Γ— 5 yang terkait dengannya.

DEFINISI Konvolusi adalah penjumlahan berbobot dari nilai intensitas piksel dalam gambar saat jendela melewati seluruh gambar. Ternyata proses konvolusi gambar dengan matriks bobot menghasilkan gambar lain (dengan ukuran yang sama, yang tergantung pada pelipatan). Koagulasi adalah proses penerapan konvolusi.

Semua manipulasi jendela geser terjadi di lapisan convolutional dari jaringan saraf. Jaringan saraf convolutional khas memiliki beberapa lapisan convolutional. Setiap lapisan konvolusional biasanya menciptakan banyak konvolusi tambahan, oleh karena itu matriks pembobotnya adalah 5 Γ— 5 Γ— n tensor, di mana n adalah jumlah konvolusi.

Sebagai contoh, biarkan gambar melewati lapisan konvolusional dengan matriks berat dimensi 5 Γ— 5 Γ— 64. Ini menciptakan 64 konvolusi dengan jendela geser 5 Γ— 5. Oleh karena itu, model yang sesuai memiliki 5 Γ— 5 Γ— 64 = 1600 parameter, yang secara signifikan lebih kecil dari jumlah parameter dari jaringan yang terhubung sepenuhnya. : 256 Γ— 256 = 65.536.

Daya tarik jaringan saraf convolutional (CNNs) adalah bahwa jumlah parameter yang digunakan oleh model tidak tergantung pada ukuran gambar asli. Anda dapat menjalankan jaringan saraf convolutional yang sama ke 300 Γ— 300 gambar, dan jumlah parameter dalam lapisan convolutional tidak akan berubah!

9.3. Persiapan Gambar


Sebelum Anda mulai menggunakan model CNN dengan TensorFlow, siapkan beberapa gambar. Daftar di bagian ini akan membantu Anda mengatur dataset pelatihan untuk sisa bab ini.

Pertama-tama, unduh dataset CIFAR-10 dari www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz. Set ini berisi 60.000 gambar yang didistribusikan secara seragam di 10 kategori, yang merupakan sumber daya yang cukup besar untuk tugas klasifikasi. Maka file gambar harus ditempatkan di direktori kerja. Dalam gbr. Gambar 9.3 menunjukkan contoh gambar dari dataset ini.

Kami sudah menggunakan dataset CIFAR-10 pada bab sebelumnya tentang auto-encoders, dan sekarang lihat kode ini lagi. Daftar berikut ini diambil langsung dari dokumentasi CIFAR-10 yang berlokasi di www.cs.toronto.edu/~kriz/cifar.html . Masukkan kode dalam file cifar_tools.py.

gambar

Daftar 9.1. Memuat gambar dari file CIFAR-10 dengan Python

import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict 

Jaringan saraf rentan terhadap pelatihan ulang, jadi penting untuk melakukan segala yang mungkin untuk meminimalkan kesalahan ini. Untuk melakukan ini, jangan lupa untuk membersihkan data sebelum memprosesnya.

Pembersihan data adalah proses utama dari pipa pembelajaran mesin. Kode dalam Listing 9.2 menggunakan tiga langkah berikut untuk membersihkan kumpulan gambar:

1. Jika Anda memiliki gambar berwarna, cobalah mengonversinya menjadi nuansa abu-abu untuk mengurangi dimensi data input dan, oleh karena itu, kurangi jumlah parameter.

2. Pikirkan tentang memotong gambar di tengah, karena ujung-ujung gambar tidak memberikan informasi yang berguna.

3. Normalisasi input dengan mengurangi mean dan membaginya dengan standar deviasi dari masing-masing sampel data sehingga gradien tidak berubah terlalu tajam selama propagasi balik.

Daftar berikut menunjukkan cara menghapus dataset menggunakan metode ini.

gambar

Simpan semua gambar dari dataset CIFAR-10 dan jalankan fungsi pembersihan. Daftar berikut mendefinisikan metode yang nyaman untuk membaca, membersihkan, dan menyusun data untuk digunakan di TensorFlow. Di sana, Anda harus memasukkan kode dari file cifar_tools.py.

Listing 9.3. Memproses ulang semua file CIFAR-10

 def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels 

Di file using_cifar.py, Anda dapat menggunakan metode ini dengan mengimpor cifar_tools untuk ini. Listing 9.4 dan 9.5 menunjukkan cara mengambil beberapa gambar dari dataset dan memvisualisasikannya.

Daftar 9.4. Menggunakan fungsi pembantu cifar_tools

 import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py') 

Anda dapat secara acak memilih beberapa gambar dan menggambarnya sesuai dengan label. Daftar berikut tidak hanya itu, sehingga Anda dapat lebih memahami jenis data yang akan Anda tangani.

gambar

Dengan menjalankan kode ini, Anda akan membuat file cifar_examples.png, yang akan terlihat seperti Gambar. 9.3.

Β»Informasi lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
Β» Isi
Β» Kutipan

Kupon diskon 20% untuk penjaja - Pembelajaran Mesin

Source: https://habr.com/ru/post/id437964/


All Articles