Pembelajaran Mendalam
dengan Aplikasi
Menggunakan Python
Chatbots dan Wajah, Objek, dan Ucapan
Pengakuan Dengan TensorFlow dan Keras
—
Navin Kumar Manaswi
Halaman 2
Pembelajaran Mendalam dengan
Aplikasi Menggunakan
Python
Chatbots dan Wajah, Objek,
dan Pengenalan Ucapan
Dengan TensorFlow dan Keras
halaman 3
Nama merek dagang, logo, dan gambar mungkin muncul di buku ini. Daripada menggunakan merek dagang
simbol dengan setiap kemunculan nama merek dagang, logo, atau gambar, kami menggunakan nama, logo,
dan gambar hanya dalam gaya editorial dan untuk kepentingan pemilik merek dagang, tanpa
maksud pelanggaran merek.
Penggunaan nama dagang, merek dagang, merek layanan, dan istilah serupa dalam publikasi ini, meskipun
mereka tidak diidentifikasi seperti itu, tidak untuk dianggap sebagai ekspresi pendapat mengenai apakah atau tidak
mereka tunduk pada hak milik.
Sedangkan nasehat dan informasi dalam buku ini diyakini benar dan akurat pada tanggal
publikasi, baik penulis maupun editor maupun penerbit tidak dapat menerima hukum apa pun
bertanggung jawab atas kesalahan atau kelalaian yang mungkin dilakukan. Penerbit tidak memberikan jaminan,
tersurat maupun tersirat, sehubungan dengan materi yang terkandung di sini.
Didistribusikan ke perdagangan buku di seluruh dunia oleh Springer Science+Business Media New York,
233 Spring Street, Lantai 6, New York, NY 10013. Telepon 1-800-SPRINGER , faks (201) 348-4505 ,
e-mail orders-ny@springer-sbm.com, atau kunjungi www.springeronline.com. Apress Media, LLC adalah
California LLC dan satu-satunya anggota (pemilik) adalah Springer Science + Business Media Finance Inc
(SSBM Keuangan Inc). SSBM Finance Inc adalah perusahaan Delaware .
Untuk informasi tentang terjemahan, silakan kirim email ke rights@apress.com, atau kunjungi www.apress.com/
hak-izin.
Judul Apress dapat dibeli dalam jumlah besar untuk penggunaan akademis, perusahaan, atau promosi. eBuku
versi dan lisensi juga tersedia untuk sebagian besar judul. Untuk informasi lebih lanjut, referensi Cetak kami
dan halaman web Penjualan Massal eBook di www.apress.com/bulk-sales.
Setiap kode sumber atau materi tambahan lainnya yang dirujuk oleh penulis dalam buku ini adalah
tersedia untuk pembaca di GitHub melalui buku ' s halaman produk, yang terletak di www.apress.
com/9781484235157. Untuk informasi lebih rinci, silakan kunjungi www.apress.com/source-code.
halaman 4
Daftar isi
Kata Pengantar ................................................... .................................................ix
halaman 5
DAFTAR ISI
iv
halaman 6
DAFTAR ISI
Menggunakan API Tingkat Tinggi untuk Membangun Model CNN ........................................ ......104
halaman 7
DAFTAR ISI
vi
halaman 8
DAFTAR ISI
Contoh Menggunakan Setiap API .............................................. ....................................135
Menggunakan PocketSphinx ................................................... .....................................135
Menggunakan Google Speech API ........................................................ ..........................136
Menggunakan Google Cloud Speech API ............................................ .................137
Menggunakan API Wit.ai............................................ ................................................137
Menggunakan API Houndify .................................................................. ..................................138
Menggunakan IBM Speech to Text API .................................................. .....................138
Menggunakan API Pengenalan Suara Bing ............................................ ............... 139
vii
halaman 9
DAFTAR ISI
viii
halaman 10
Kata pengantar
Deep Learning telah berjalan sangat jauh. Dari lahirnya ide hingga
memahami pikiran manusia dan konsep asosiasionisme — bagaimana kita
mempersepsikan sesuatu dan bagaimana hubungan objek dan pandangan memengaruhi
berpikir dan melakukan, hingga model asosiasionisme yang dimulai pada tahun
tahun 1870-an ketika Alexander Bain memperkenalkan konser pertama Artificial
Neural Network dengan mengelompokkan neuron.
Maju cepat ke hari ini 2018 dan kita lihat bagaimana Deep Learning memiliki
ditingkatkan secara dramatis dan dalam semua bentuk kehidupan — mulai dari deteksi objek,
pengenalan suara, terjemahan mesin, kendaraan otonom, wajah
deteksi dan penggunaan deteksi wajah dari tugas-tugas duniawi seperti
membuka kunci iPhoneX Anda untuk melakukan tugas yang lebih mendalam seperti kejahatan
deteksi dan pencegahan.
Jaringan Saraf Konvolusi dan Jaringan Saraf Berulang
bersinar terang saat mereka terus membantu memecahkan masalah dunia
di semua bidang industri seperti Otomotif & Transportasi,
Kesehatan & Kedokteran, Ritel untuk beberapa nama. Kemajuan besar sedang dibuat
di area ini dan metrik seperti ini cukup menjelaskan tentang palpabilitas
industri pembelajaran mendalam:
– Pasar pekerjaan terkait AI mempekerjakan 5x lebih banyak sejak 2013 dan Deep Learning adalah
skill paling dicari di 2018
ix
halaman 11
KATA PENGANTAR
– 84% perusahaan percaya bahwa berinvestasi di AI akan memberi mereka persaingan yang hebat
tepi tive
Dan akhirnya,
– tingkat kesalahan klasifikasi gambar telah turun dari 28% pada tahun 2012 menjadi
2,5% di tahun 2017 dan terus turun!
halaman 12
tentang Penulis
Navin Kumar Manaswi telah berkembang
Solusi AI dengan penggunaan mutakhir
teknologi dan ilmu pengetahuan yang berhubungan dengan artifisial
kecerdasan selama bertahun-tahun. Setelah bekerja untuk
perusahaan konsultan di Malaysia, Singapura,
dan proyek Dubai Smart City, juga
sebagai perusahaannya sendiri, ia telah mengembangkan
campuran keterampilan yang langka untuk menyampaikan ujung ke ujung
solusi kecerdasan buatan, termasuk
kecerdasan video, kecerdasan dokumen, dan
chatbot mirip manusia. Saat ini, ia memecahkan masalah B2B secara vertikal
perawatan kesehatan, aplikasi perusahaan, IoT industri, dan ritel di Symphony
AI Incubator sebagai arsitek AI pembelajaran yang mendalam. Dengan buku ini, dia ingin
mendemokratisasikan komputasi kognitif dan layanan untuk semua orang, terutama
pengembang, ilmuwan data, insinyur perangkat lunak, insinyur basis data, data
analis, dan manajer tingkat C.
xi
halaman 13
halaman 14
BAB 1
Dasar-dasar TensorFlow
Bab ini membahas dasar-dasar TensorFlow, pembelajaran mendalam
kerangka. Pembelajaran mendalam melakukan pekerjaan luar biasa dalam pengenalan pola,
terutama dalam konteks gambar, suara, ucapan, bahasa, dan waktu-
data seri. Dengan bantuan pembelajaran mendalam, Anda dapat mengklasifikasikan, memprediksi,
cluster, dan mengekstrak fitur. Untungnya, pada November 2015, Google
merilis TensorFlow, yang telah digunakan di sebagian besar produk Google
seperti Google Penelusuran, deteksi spam, pengenalan ucapan, Google
Asisten, Google Now, dan Google Foto. Menjelaskan dasar
komponen TensorFlow adalah tujuan dari bab ini.
TensorFlow memiliki kemampuan unik untuk melakukan subgraf parsial
komputasi sehingga memungkinkan pelatihan terdistribusi dengan bantuan
mempartisi jaringan saraf. Dengan kata lain, TensorFlow memungkinkan model
paralelisme dan paralelisme data. TensorFlow menyediakan beberapa API.
API level terendah—TensorFlow Core—menyediakan Anda dengan lengkap
kontrol pemrograman.
Perhatikan poin penting berikut terkait TensorFlow:
halaman 15
halaman 16
halaman 17
Jadi, struktur program TensorFlow memiliki dua fase, yang ditunjukkan di sini:
halaman 18
sess = tf.Session()
halaman 19
halaman 20
Umumnya, Anda harus berurusan dengan banyak gambar dalam pembelajaran mendalam, jadi Anda
harus menempatkan nilai piksel untuk setiap gambar dan terus mengulangi semua gambar.
Untuk melatih model, Anda harus dapat memodifikasi grafik untuk menyetel
beberapa objek seperti berat dan bias. Singkatnya, variabel memungkinkan Anda untuk
menambahkan parameter yang dapat dilatih ke grafik. Mereka dibangun dengan tipe dan
nilai awal.
Mari buat konstanta di TensorFlow dan cetak.
Dua langkah pertama termasuk dalam fase konstruksi, dan dua yang terakhir
langkah-langkah termasuk dalam fase eksekusi. Saya akan membahas konstruksi dan
fase eksekusi TensorFlow sekarang.
Anda dapat menulis ulang kode sebelumnya dengan cara lain, seperti yang ditunjukkan di sini:
halaman 21
Sekarang Anda akan menjelajahi bagaimana Anda membuat variabel dan menginisialisasinya. Di sini adalah
kode yang melakukannya:
Berikut penjelasan dari kode sebelumnya:
halaman 22
Placeholder
Sebuah placeholder adalah variabel yang dapat Anda makan sesuatu untuk di lain waktu. Dia
dimaksudkan untuk menerima input eksternal. Placeholder dapat memiliki satu atau beberapa
dimensi, dimaksudkan untuk menyimpan array n -dimensi.
Dalam contoh berikut, Anda membuat matriks 2×4 (array 2D) untuk
menyimpan beberapa nomor di dalamnya. Anda kemudian menggunakan operasi yang sama seperti sebelumnya untuk
melakukan elemen-bijaksana mengalikan dengan 10 dan menambahkan 1 untuk itu. Dimensi pertama
dari placeholder adalah None, yang berarti sejumlah baris diperbolehkan.
halaman 23
Anda juga dapat mempertimbangkan larik 2D sebagai pengganti larik 1D. Ini dia
kode:
Ini adalah matriks 2x4. Jadi, jika Anda mengganti None dengan 2, Anda dapat melihat
keluaran yang sama.
Tetapi jika Anda membuat placeholder dengan bentuk [3, 4] (perhatikan bahwa Anda akan memberi makan
matriks 2x4 di lain waktu), ada kesalahan, seperti yang ditunjukkan di sini:
10
halaman 24
Penting untuk disadari bahwa init adalah pegangan untuk subgraf TensorFlow
yang menginisialisasi semua variabel global. Sampai Anda memanggil sess.run, itu
variabel tidak diinisialisasi.
11
halaman 25
Membuat Tensor
Sebuah gambar adalah tensor dari urutan ketiga di mana dimensi milik
tinggi, lebar, dan jumlah saluran (Merah, Biru, dan Hijau).
Di sini Anda dapat melihat bagaimana gambar diubah menjadi tensor:
12
halaman 26
Anda dapat menghasilkan tensor dari berbagai jenis seperti tensor tetap,
tensor acak, dan tensor berurutan.
Tensor Tetap
Berikut adalah tensor tetap:
13
halaman 27
Urutan Tensor
tf.range membuat urutan angka mulai dari nilai yang ditentukan
dan memiliki kenaikan tertentu.
14
halaman 28
Tensor Acak
tf.random_uniform menghasilkan nilai acak dari distribusi seragam
dalam suatu jangkauan.
halaman 29
Jika Anda tidak dapat menemukan hasilnya, harap perbaiki bagian sebelumnya
dimana saya membahas pembuatan tensor.
Di sini Anda dapat melihat hasilnya:
Bekerja di Matriks
Setelah Anda merasa nyaman membuat tensor, Anda dapat menikmati mengerjakannya
matriks (tensor 2D).
16
halaman 30
Fungsi Aktivasi
Ide fungsi aktivasi berasal dari analisis bagaimana a
neuron bekerja di otak manusia (lihat Gambar 1-1 ). Neuron menjadi
aktif melampaui ambang batas tertentu, lebih dikenal sebagai potensial aktivasi .
Itu juga mencoba untuk menempatkan output ke dalam kisaran kecil dalam banyak kasus.
Sigmoid, tangen hiperbolik (tanh), ReLU, dan ELU adalah yang paling populer
fungsi aktivasi.
Mari kita lihat fungsi aktivasi yang populer.
17
halaman 31
18
halaman 32
halaman 33
ReLU6
ReLU6 mirip dengan ReLU kecuali outputnya tidak boleh lebih dari enam.
20
halaman 34
halaman 35
Fungsi Rugi
Fungsi kerugian (fungsi biaya) harus diminimalkan untuk mendapatkan yang terbaik
nilai untuk setiap parameter model. Misalnya, Anda perlu mendapatkan
nilai terbaik dari bobot (slope) dan bias (y-intercept) sehingga dapat menjelaskan
target (y) dalam hal prediktor (X). Caranya adalah untuk mencapai yang terbaik
nilai kemiringan, dan perpotongan y adalah untuk meminimalkan fungsi biaya/kerugian
fungsi/jumlah kuadrat. Untuk model apapun, ada banyak parameter,
dan struktur model dalam prediksi atau klasifikasi dinyatakan dalam
istilah dari nilai parameter.
Anda perlu mengevaluasi model Anda, dan untuk itu Anda perlu mendefinisikan
fungsi biaya (fungsi kerugian). Minimalisasi fungsi kerugian dapat
menjadi kekuatan pendorong untuk menemukan nilai optimal dari setiap parameter. Untuk
22
halaman 36
tf.contrib.losses.absolute_difference
tf.contrib.losses.add_loss
23
halaman 37
tf.contrib.losses.hinge_loss
tf.contrib.losses.compute_weighted_loss
tf.contrib.losses.cosine_distance
tf.contrib.losses.get_losses
tf.contrib.losses.get_regularization_losses
tf.contrib.losses.get_total_loss
tf.contrib.losses.log_loss
tf.contrib.losses.mean_pairwise_squared_error
tf.contrib.losses.mean_squared_error
tf.contrib.losses.sigmoid_cross_entropy
tf.contrib.losses.softmax_cross_entropy
tf.contrib.losses.sparse_softmax_cross_entropy
tf.contrib.losses.log(prediksi,label,berat=2.0)
24
halaman 38
Pengoptimal
Sekarang Anda harus yakin bahwa Anda perlu menggunakan fungsi kerugian untuk
mendapatkan nilai terbaik dari setiap parameter model. Bagaimana Anda bisa mendapatkan
nilai terbaik?
Awalnya Anda mengasumsikan nilai awal bobot dan bias untuk model
(regresi linier, dll.). Sekarang Anda perlu menemukan cara untuk mencapai
nilai parameter terbaik. Pengoptimal adalah cara untuk mencapai yang terbaik
nilai parameter. Dalam setiap iterasi, nilai berubah dalam arah
disarankan oleh pengoptimal. Misalkan Anda memiliki 16 nilai bobot (w1, w2,
w3, …, w16) dan 4 bias (b1, b2, b3, b4). Awalnya Anda dapat mengasumsikan setiap
bobot dan bias menjadi nol (atau satu atau angka apa pun). Pengoptimal menyarankan
apakah w1 (dan parameter lainnya) harus meningkat atau menurun dalam
iterasi berikutnya sambil menjaga tujuan minimalisasi dalam pikiran. Setelah banyak
iterasi, w1 (dan parameter lainnya) akan stabil ke nilai terbaik
(atau nilai) parameter.
Dengan kata lain, TensorFlow, dan setiap kerangka kerja pembelajaran mendalam lainnya,
menyediakan pengoptimal yang perlahan mengubah setiap parameter untuk
meminimalkan fungsi kerugian. Tujuan dari pengoptimal adalah untuk memberikan
arah ke bobot dan bias untuk perubahan pada iterasi berikutnya.
Asumsikan bahwa Anda memiliki 64 bobot dan 16 bias; Anda mencoba untuk mengubah
bobot dan nilai bias pada setiap iterasi (selama backpropagation) sehingga
Anda mendapatkan nilai bobot dan bias yang benar setelah banyak iterasi saat
mencoba meminimalkan fungsi kerugian.
Memilih pengoptimal terbaik agar model dapat menyatu dengan cepat dan dipelajari
bobot dan bias dengan benar adalah tugas yang rumit.
Teknik adaptif (adadelta, adagrad, dll.) adalah pengoptimal yang baik
untuk konvergen lebih cepat untuk jaringan saraf yang kompleks. Adam seharusnya
pengoptimal terbaik untuk sebagian besar kasus. Ini juga mengungguli adaptif lainnya
teknik (adadelta, adagrad, dll.), tetapi secara komputasi mahal. Untuk
kumpulan data yang jarang, metode seperti SGD, NAG, dan momentum bukanlah
pilihan terbaik; yang tingkat pembelajaran adaptif metode yang. Manfaat tambahan
25
halaman 39
adalah bahwa Anda tidak perlu menyesuaikan kecepatan belajar tetapi kemungkinan besar dapat mencapai
hasil terbaik dengan nilai default.
26
halaman 40
27
halaman 41
Metrik
Setelah mempelajari beberapa cara untuk membangun model, sekarang saatnya untuk mengevaluasi
model. Jadi, Anda perlu mengevaluasi regressor atau classifier.
Ada banyak metrik evaluasi, di antaranya klasifikasi
akurasi, kerugian logaritmik, dan area di bawah kurva ROC adalah yang paling populer
yang.
Akurasi klasifikasi adalah rasio jumlah prediksi yang benar
ke jumlah semua prediksi. Ketika pengamatan untuk setiap kelas tidak
banyak miring, akurasi dapat dianggap sebagai metrik yang baik.
tf.contrib.metrics.accuracy(label_aktual, prediksi)
Contoh Metrik
Bagian ini menunjukkan kode untuk didemonstrasikan.
Di sini Anda membuat nilai aktual (menyebutnya x) dan nilai prediksi
(memanggil mereka y). Kemudian Anda memeriksa keakuratannya. Akurasi mewakili
rasio berapa kali aktual sama dengan nilai prediksi dan
28
halaman 42
Metrik Umum
Berikut adalah daftar metrik umum:
29
halaman 43
30
halaman 44
BAB 2
Memahami dan
Bekerja di Keras
Keras adalah library Python tingkat tinggi yang ringkas dan mudah dipelajari untuk deep
pembelajaran yang dapat berjalan di atas TensorFlow (atau Theano atau CNTK). Dia
memungkinkan pengembang untuk fokus pada konsep utama pembelajaran mendalam, seperti
sebagai membuat lapisan untuk jaringan saraf, sambil mengurus seluk beluknya
detail tensor, bentuknya, dan detail matematisnya. TensorFlow
(atau Theano atau CNTK) harus menjadi back end untuk Keras. Anda dapat menggunakan Keras
untuk aplikasi pembelajaran mendalam tanpa berinteraksi dengan relatif
kompleks TensorFlow (atau Theano atau CNTK). Ada dua jenis utama
kerangka kerja: API sekuensial dan API fungsional. berurutan
API didasarkan pada gagasan tentang urutan lapisan; ini yang paling umum
penggunaan Keras dan bagian termudah dari Keras. Model sekuensial dapat
dianggap sebagai tumpukan linier lapisan.
Singkatnya, Anda membuat model sekuensial di mana Anda dapat dengan mudah menambahkan
lapisan, dan setiap lapisan dapat memiliki konvolusi, max pooling, aktivasi, drop-
keluar, dan normalisasi batch. Mari kita melalui langkah-langkah utama untuk berkembang
model pembelajaran mendalam di Keras.
halaman 45
1. Muat datanya.
2. Praproses data.
3. Tentukan modelnya.
4. Kompilasi modelnya.
5. Sesuaikan modelnya.
6. Evaluasi modelnya.
7. Buat prediksi.
8. Simpan modelnya.
32
halaman 46
Muat Data
Berikut adalah cara Anda memuat data:
Praproses Data
Berikut adalah cara Anda memproses data sebelumnya:
33
halaman 47
Tentukan Modelnya
Model sekuensial di Keras didefinisikan sebagai urutan lapisan. Anda
membuat model sekuensial dan kemudian menambahkan lapisan. Anda perlu memastikan
lapisan input memiliki jumlah input yang tepat. Asumsikan Anda memiliki 3.072
variabel masukan; maka Anda perlu membuat lapisan tersembunyi pertama dengan 512
node/neuron. Di lapisan tersembunyi kedua, Anda memiliki 120 node/neuron.
Akhirnya, Anda memiliki sepuluh node di lapisan output. Misalnya, gambar
memetakan ke sepuluh node yang menunjukkan kemungkinan menjadi label1 (pesawat),
label2 (mobil), label3 (kucing), …, label10 (truk). Node tertinggi
probabilitas adalah kelas/label yang diprediksi.
34
halaman 48
Pertanyaan selanjutnya adalah, bagaimana Anda mengetahui jumlah lapisan yang akan digunakan dan
tipe mereka? Tidak ada yang punya jawaban pasti. Yang terbaik untuk metrik evaluasi adalah
bahwa Anda memutuskan jumlah lapisan yang optimal dan parameter serta langkah-langkahnya
di setiap lapisan. Pendekatan heuristik juga digunakan. Struktur jaringan terbaik
ditemukan melalui proses eksperimentasi coba-coba. Umumnya, Anda
membutuhkan jaringan yang cukup besar untuk menangkap struktur masalah.
35
halaman 49
Dalam contoh ini, Anda akan menggunakan struktur jaringan yang sepenuhnya terhubung dengan
tiga lapisan. Kelas padat mendefinisikan lapisan yang terhubung penuh.
Dalam hal ini, Anda menginisialisasi bobot jaringan ke acak kecil
bilangan yang dihasilkan dari distribusi seragam (uniform) dalam hal ini
kasus antara 0 dan 0,05 karena itu adalah bobot seragam default
inisialisasi di Keras. Alternatif tradisional lainnya akan normal untuk
bilangan acak kecil yang dihasilkan dari distribusi Gaussian. Anda menggunakan atau
snap ke klasifikasi keras dari kedua kelas dengan ambang default 0,5.
Anda dapat menggabungkan semuanya dengan menambahkan setiap lapisan.
Kompilasi Modelnya
Setelah mendefinisikan model dalam hal lapisan, Anda perlu mendeklarasikan kerugian
fungsi, pengoptimal, dan metrik evaluasi. Ketika modelnya
diusulkan, bobot awal dan nilai bias diasumsikan 0 atau 1, a
nomor terdistribusi normal acak, atau nomor nyaman lainnya.
Tetapi nilai awal bukanlah nilai terbaik untuk model. Ini berarti
nilai awal bobot dan bias tidak mampu menjelaskan target/label dalam
istilah prediktor (Xs). Jadi, Anda ingin mendapatkan nilai optimal untuk model tersebut.
Perjalanan dari nilai awal menuju nilai optimal membutuhkan motivasi, yang
akan meminimalkan fungsi biaya/fungsi kerugian. Perjalanan butuh jalan
(perubahan di setiap iterasi), yang disarankan oleh pengoptimal. Perjalanan
juga membutuhkan pengukuran evaluasi, atau metrik evaluasi.
Fungsi kerugian yang populer adalah entropi silang biner, persilangan kategoris
entropi, mean_squared_logarithmic_error dan kehilangan engsel. Populer
pengoptimal adalah penurunan gradien stokastik (SGD), RMSProp, adam,
adagrad, dan adadelta. Metrik evaluasi yang populer adalah akurasi, ingatan,
dan skor F1.
36
halaman 50
Singkatnya, langkah ini ditujukan untuk menyetel bobot dan bias berdasarkan
kehilangan fungsi melalui iterasi berdasarkan pengoptimal yang dievaluasi oleh
metrik seperti akurasi.
Sesuaikan Modelnya
Setelah mendefinisikan dan menyusun model, Anda perlu membuat prediksi
dengan mengeksekusi model pada beberapa data. Di sini Anda perlu menentukan
zaman; ini adalah jumlah iterasi untuk menjalankan proses pelatihan
melalui kumpulan data dan ukuran batch, yang merupakan jumlah instance
yang dievaluasi sebelum pembaruan bobot. Untuk masalah ini, program
akan berjalan untuk sejumlah kecil zaman (10), dan di setiap zaman, itu akan
menyelesaikan 50 (= 50.000/1.000) iterasi di mana ukuran batch adalah 1.000 dan
set data pelatihan memiliki 50.000 instans/gambar. Sekali lagi, tidak ada aturan keras
untuk memilih ukuran batch. Tapi seharusnya tidak terlalu kecil, dan seharusnya
jauh lebih kecil dari ukuran set data pelatihan untuk mengkonsumsi lebih sedikit memori.
37
halaman 51
Evaluasi Model
Setelah melatih jaringan saraf pada set data pelatihan, Anda perlu
untuk mengevaluasi kinerja jaringan. Perhatikan bahwa ini hanya akan memberi
Anda memiliki gambaran seberapa baik Anda telah memodelkan kumpulan data (misalnya, kereta api
akurasi), tetapi Anda tidak akan tahu seberapa baik kinerja algoritme
pada data baru. Ini untuk kesederhanaan, tetapi idealnya, Anda dapat memisahkan
data ke dalam set data latih dan uji untuk pelatihan dan evaluasi Anda
model. Anda dapat mengevaluasi model Anda pada kumpulan data pelatihan Anda menggunakan
evaluasi() pada model Anda dan berikan input yang sama dan
output yang digunakan untuk melatih model. Ini akan menghasilkan prediksi untuk masing-masing
pasangan input dan output dan mengumpulkan skor, termasuk kerugian rata-rata dan
metrik apa pun yang telah Anda konfigurasikan, seperti akurasi.
Ramalan
Setelah Anda membangun dan mengevaluasi model, Anda perlu memprediksi untuk
data yang tidak diketahui.
38
halaman 52
39
halaman 53
model.ringkasan()
4. Modelkan konfigurasi.
model.get_config()
model.get_weights()
Berikut saya bagikan kode lengkap untuk model Keras. Bisakah kamu
mencoba menjelaskannya?
40
halaman 54
halaman 55
42
halaman 56
"backend": "theano",
"epsilon": 1e-07,
"image_data_format": "channels_first",
"floatx": "float32"
Di bab-bab berikutnya, Anda akan belajar bagaimana memanfaatkan Keras untuk bekerja
CNN, RNN, LSTM, dan aktivitas pembelajaran mendalam lainnya.
43
halaman 57
BAGIAN 3
Perceptron berlapis-lapis
Sebelum Anda mulai belajar tentang perceptron berlapis-lapis, Anda perlu mendapatkan
tampilan gambaran besar dari jaringan saraf tiruan. Itulah yang akan saya mulai dengan
Bab ini.
halaman 58
46
halaman 59
Perceptron berlapis-lapis
Sebuah perceptron multilayer (MLP) adalah contoh sederhana dari umpan balik buatan
jaringan saraf. Sebuah MLP terdiri dari setidaknya satu lapisan tersembunyi dari node
selain lapisan input dan lapisan output. Setiap node dari lapisan lainnya
47
halaman 60
48
halaman 61
Angka 3-6 menunjukkan algoritma pembelajaran yang Anda gunakan saat output
label Y adalah 0 atau 1 untuk masalah klasifikasi biner.
Gambar 3-6. Beberapa input (X1 dan X1) dan satu output (Y)
49
halaman 62
Diberikan vektor fitur input X1 dan X2, Anda menginginkan probabilitas bahwa
Y = 1 diberikan fitur input. Ini juga disebut perceptron . Hasil
lapisan, Y, adalah (Z), di mana Z adalah WX + b.
é x 1ù éW 1 W 2 ù é x 1 ù é B1 ù æé W 1 * x 1 + W 2 * x 2 1+ B ù Hai
ê ® ê úê + ê ® S Cê ú÷
ëx 2û ëW 3 W 4 û ë x 2 û ë B2 û è ëW 3 * x 1 + W 4 * x 2 + B 2 û Hai
Angka 3-7 menunjukkan jaringan saraf dua lapis, dengan lapisan tersembunyi dan
sebuah lapisan keluaran. Pertimbangkan bahwa Anda memiliki dua vektor fitur input X1 dan X2
menghubungkan ke dua neuron, X1' dan X2'. Parameter (bobot) yang terkait
dari lapisan input ke lapisan tersembunyi adalah w1, w2, w3, w4, b1, b2.
50
halaman 63
é x 1' ù éw 1 w 2ùé x 1ù é B1 ù
ê = ê úê + ê ú
ë x 2' û ëw 3 w 4ûëx 2û ëB 2 û
é A1 ù é x 1' ù
ê = S ê ú
ë A2 û ëx 2 'û
51
halaman 64
é A1 ù
a'= [ w 5 w 6 ]ê B 3 membuat kombinasi linier dari (w5*a1 +
û[]
ëA 2 +
w6*a2) + b3, yang akan melewati fungsi sigmoid nonlinier ke
lapisan keluaran akhir, Y.
s a'
y=( )
52
halaman 65
1,20 0,35
Parameter disesuaikan dengan w = 1,20 dan b = 0,35.
Inilah langkah 2: Y1 = 1,20*X + 0,35.
1,24 0,31
Parameter disesuaikan dengan w = 1,24 dan b = 0,31.
Berikut langkah 3: Y1 = 1,24*X + 0,31.
1,25 0,30
53
halaman 66
Setelah beberapa iterasi, bobot dan bias menjadi stabil. Seperti yang kamu lihat,
perubahan awal tinggi saat menyetel. Setelah beberapa iterasi, perubahan
tidak signifikan.
L(w, b) diminimalkan untuk w = 1,26 dan b = 0,29; oleh karena itu, model akhir
menjadi sebagai berikut:
Y = 1,26 * X + 0,29
Demikian pula, dalam dua dimensi, Anda dapat mempertimbangkan parameter, bobot
matriks dan vektor bias.
é1 1 ù
Mari kita asumsikan bahwa matriks bobot awal dan vektor bias sebagai W = ê ú
ë1 1 û
é1 ù
dan B = ê ú .
ë1 û
é1 1 ù é1 ù
=
YW =ê
* [ ]x+ ê ú adalah model awal. Matriks bobot (2x2)
ë1 1 û ë1 û
dan matriks bias (2x1) disetel di setiap iterasi. Jadi, kita bisa melihat perubahan dalam
matriks bobot dan bias
Inilah langkah 1:
é07. 08 . ù é 2 .4 ù
W =ê ú, =
B ê ú
ë06. 12 . û ë 3 .2 û
54
halaman 67
Inilah langkah 2:
é 07. 08 . ù é2 .4 ù
ê ú ê ú
ë 06. 12 . û ë3 .2 û
é 06. 07 . ù é 2 .8 ù
W =ê ú, B
= ê ú
ë 04. 13 . û ë 3 .8 û
Inilah langkah 3:
é 06. 07 . ù é 2 .8 ù
ê ú ê ú
ë 04. 13 . û ë 3 .8 û
Anda dapat melihat perubahan dalam matriks bobot (2x2) dan matriks bias (2x1) di
iterasi.
é 05. 06 . ù é 2 .9 ù
W =ê ú, =
B ê ú
ë 03. 13 . û ë 4 .0 û
55
halaman 68
é 04. 05 . ù é 3 .0 ù
Y= ê * [ ]x+ ê ú
ë 02. 13 . û ë 4 .0 û
Dalam bab ini, Anda mempelajari bagaimana bobot dan bias disetel di masing-masing
iterasi sambil menjaga tujuan meminimalkan fungsi kerugian. Itu adalah
dilakukan dengan bantuan pengoptimal seperti penurunan gradien stokastik.
Dalam bab ini, kita telah memahami ANN dan MLP sebagai dasar yang dalam
model pembelajaran. Di sini, kita dapat melihat MLP sebagai perkembangan alami dari
regresi linier dan logistik. Kami telah melihat betapa berat dan biasnya
disetel di setiap iterasi yang terjadi di backpropagation. Tanpa
masuk ke rincian backpropagation, kita telah melihat aksi/hasil dari
propagasi balik. Dalam dua bab berikutnya, kita dapat mempelajari cara membangun MLP
model di TensorFlow dan dalam keras.
56
halaman 69
BAB 4
Regresi ke MLP
di TensorFlow
Orang-orang telah menggunakan regresi dan pengklasifikasi untuk waktu yang lama. Sekarang saatnya
untuk beralih ke topik jaringan saraf. Perceptron berlapis - lapis (MLP)
adalah model jaringan saraf sederhana di mana Anda dapat menambahkan satu atau lebih tersembunyi
lapisan antara lapisan input dan output.
Dalam bab ini, Anda akan melihat bagaimana TensorFlow dapat membantu Anda membangun
model. Anda akan mulai dengan model paling dasar, yaitu model linier.
Model logistik dan MLP juga dibahas dalam bab ini.
1. Muat datanya.
halaman 70
58
halaman 71
Dalam kode berikut, Anda akan menggunakan kumpulan data Iris dari Seaborn, yang:
memiliki lima atribut. Anda akan mempertimbangkan panjang sepal sebagai input Anda dan
panjang kelopak sebagai nilai keluaran. Tujuan utama dari model regresi ini adalah untuk
memprediksi panjang kelopak ketika Anda diberi nilai panjang sepal. X adalah
panjang sepal, dan Y adalah panjang petal.
Regresi linier menggunakan TensorFlow pada data Iris
59
halaman 72
BAB 4 REGRESI MLP DI TENSORFLOW
60
halaman 73
Jika Anda menjalankan kode, Anda akan melihat output yang ditunjukkan pada Gambar 4-3 .
Gambar 4-3. Bobot, bias, dan kerugian di setiap langkah
61
halaman 74
62
halaman 75
Dalam kode berikut, Anda akan menggunakan set data Iris, yang memiliki lima:
atribut. Yang kelima adalah kelas sasaran. Anda akan mempertimbangkan sepal
panjang dan lebar sepal sebagai atribut prediktor dan spesies bunga
sebagai nilai sasaran. Tujuan utama dari model regresi logistik ini adalah untuk
memprediksi jenis spesies ketika Anda diberi panjang sepal dan sepal
nilai lebar.
Buat file Python dan impor semua perpustakaan yang diperlukan.
63
halaman 76
64
halaman 77
halaman 78
66
halaman 79
halaman 80
Jika Anda menjalankan kode ini, Anda akan mendapatkan plot yang ditunjukkan pada Gambar 4-8 .
Dalam bab ini, saya membahas bagaimana Anda dapat membangun linier, logistik, dan MLP
model di TensorFlow secara sistemik.
68
halaman 81
BAB 5
Regresi ke MLP
di Keras
Anda telah mengerjakan regresi sambil menyelesaikan pembelajaran mesin
aplikasi. Regresi linier dan regresi nonlinier digunakan untuk
memprediksi target numerik, sementara regresi logistik dan pengklasifikasi lainnya adalah
digunakan untuk memprediksi variabel target non-numerik. Dalam bab ini, saya akan membahas
evolusi perceptron multilayer.
Secara khusus, Anda akan membandingkan akurasi yang dihasilkan oleh berbagai
model dengan dan tanpa menggunakan Keras.
Model Log-Linear
Buat file Python baru dan impor paket berikut. Yakinkan
Anda telah menginstal Keras di sistem Anda.
halaman 82
Anda akan menggunakan kumpulan data Iris sebagai sumber data. Jadi, muat
kumpulan data dari Seaborn.
Kumpulan data Iris memiliki lima atribut. Anda akan menggunakan empat yang pertama
atribut untuk memprediksi spesies, yang kelasnya ditentukan dalam atribut kelima
dari kumpulan data.
#############################################
# scikit Belajar untuk (Log) Regresi Linier #
#############################################
Saat model dilatih, Anda dapat memprediksi output dari set pengujian.
70
halaman 83
Saat model dilatih, Anda dapat memprediksi output dari set pengujian.
halaman 84
72
halaman 85
Regresi logistik
Di bagian ini, saya akan membagikan contoh untuk regresi logistik sehingga Anda dapat
bandingkan kode di scikit-learn dengan kode di Keras (lihat Gambar 5-1 ).
Anda akan menggunakan kumpulan data Iris sebagai sumber data. Jadi, muat
kumpulan data dari scikit-belajar.
73
halaman 86
##################################################
halaman 87
Gunakan fungsi model.fit untuk melatih model dengan kumpulan data pelatihan.
75
halaman 88
BAB 5 REGRESI MLP DI KERAS
Jika Anda menjalankan kode, Anda akan melihat output berikut:
Untuk memberikan contoh kehidupan nyata, saya akan membahas beberapa kode yang menggunakan
Kumpulan data Fashion MNIST, yang merupakan kumpulan data gambar Zalando.com
terdiri dari satu set pelatihan 60.000 contoh dan satu set uji 10.000
contoh. Setiap contoh adalah gambar skala abu-abu 28 × 28 yang terkait dengan label
dari sepuluh kelas.
76
halaman 89
Seperti yang disebutkan, Anda akan menggunakan kumpulan data Fashion MNIST. Simpan
data dan label dalam dua variabel yang berbeda.
Normalisasikan kumpulan data, seperti yang ditunjukkan di sini:
77
halaman 90
Simpan model dalam file .h5 (sehingga Anda dapat menggunakannya nanti secara langsung dengan
fungsi load_model() dari keras.models) dan cetak akurasi dari
model di set tes, seperti yang ditunjukkan di sini:
78
halaman 91
Jika Anda menjalankan kode sebelumnya, Anda akan melihat output berikut:
79
halaman 92
Tulis Kodenya
Buat file Python baru dan impor paket berikut. Yakinkan
Anda telah menginstal Keras di sistem Anda.
Muat kumpulan data dengan membaca file CSV menggunakan Pandas.
80
halaman 93
Pisahkan data dan target dan simpan dalam dua variabel berbeda.
halaman 94
Ubah nilai string menjadi nilai numerik, seperti yang ditunjukkan di sini:
Pisahkan x dan y, dengan kata lain, set fitur dan set target, seperti yang ditunjukkan di sini:
82
halaman 95
Buat prediksi pada model yang dilatih, seperti yang ditunjukkan di sini:
Cetak akurasi yang dihasilkan oleh model, seperti yang ditunjukkan di sini:
Jika Anda menjalankan kode, Anda akan melihat output berikut:
Zaman 1/100
120/120 [==============================] - 0 detik - kalah: 2,7240 -
acc: 0,3667
Zaman 2/100
120/120 [==============================] - 0 detik - kalah: 2,4166 -
acc: 0,3667
Zaman 3/100
120/120 [==============================] - 0 detik - kalah: 2.1622 -
acc: 0,4083
Zaman 4/100
120/120 [==============================] - 0 detik - kalah: 1,9456 -
acc: 0,6583
83
halaman 96
Zaman 98/100
120/120 [==============================] - 0 detik - kalah: 0,5571 -
acc: 0,9250
Zaman 99/100
120/120 [==============================] - 0 detik - kalah: 0,5554 -
acc: 0,9250
Zaman 100/100
120/120 [==============================] - 0 detik - kalah: 0,5537 -
acc: 0,9250
halaman 97
Tampilkan jumlah sampel pelatihan yang ada dalam kumpulan data dan
juga jumlah set tes yang tersedia.
85
halaman 98
Fungsi untuk mengoptimalkan adalah entropi silang antara label yang sebenarnya
dan output (softmax) dari model.
86
halaman 99
87
halaman 100
Kompilasi modelnya.
88
halaman 101
Zaman 1/20
1000/1000 [==============================] - 0 detik - kalah:
2.4432 - acc: 0.0970
Zaman 2/20
1000/1000 [==============================] - 0 detik - kalah:
2,3927 - perkiraan: 0,0850
Zaman 3/20
1000/1000 [==============================] - 0 detik - kalah:
2.3361 - acc: 0.1190
Zaman 4/20
1000/1000 [==============================] - 0 detik - kalah:
2.3354 - acc: 0.1000
Zaman 19/20
1000/1000 [==============================] - 0 detik - kalah:
2.3034 - acc: 0.1160
Zaman 20/20
1000/1000 [==============================] - 0 detik - kalah:
2.3055 - acc: 0.0980
100/100 [==============================] - 0s
Dalam bab ini, saya membahas bagaimana membangun linier, logistik, dan MLP
model di Keras secara sistemik.
89
halaman 102
BAB 6
saraf konvolusi
Jaringan
Sebuah jaringan saraf convolutional (CNN) adalah umpan-maju, buatan dalam
jaringan saraf di mana jaringan saraf mempertahankan hierarki
struktur dengan mempelajari representasi fitur internal dan menggeneralisasikan
fitur dalam masalah gambar umum seperti pengenalan objek dan lainnya
masalah penglihatan komputer. Ini tidak terbatas pada gambar; itu juga mencapai
hasil mutakhir dalam masalah pemrosesan bahasa alami dan
pengenalan suara.
Halaman 103
Catatan Peta gambar adalah daftar koordinat yang berkaitan dengan titik tertentu
gambar.
92
halaman 104
Bab 6 Jaringan saraf konvolusi
Seperti yang ditunjukkan pada Gambar 6-2 , filter memiliki bobot masukan dan menghasilkan
neuron keluaran. Katakanlah Anda mendefinisikan lapisan konvolusi dengan enam filter
dan bidang reseptif dengan lebar 2 piksel dan tinggi 2 piksel dan menggunakan a
lebar langkah default 1, dan padding default diatur ke 0. Setiap filter
menerima input dari 2x2 piksel, bagian gambar. Dengan kata lain, itu 4
piksel pada suatu waktu. Oleh karena itu, Anda dapat mengatakan itu akan membutuhkan bobot input 4 + 1 (bias).
Volume input adalah 5 × 5 × 3 (lebar × tinggi × jumlah saluran), di sana
enam filter berukuran 2×2 dengan langkah 1 dan pad 0. Oleh karena itu, jumlah
parameter di lapisan ini untuk setiap filter memiliki 2*2*3 + 1 = 13 parameter (ditambahkan
+1 untuk bias). Karena ada enam filter, Anda mendapatkan 13*6 = 78 parameter.
93
halaman 105
Berikut ringkasannya:
• W2 = (W1-f+ 2P) /S + 1 = 4.
• H2 = (H1-f+2P)/S +1 = 4.
• D2 = Jumlah filter = f = 6.
94
halaman 106
Arsitektur CNN
CNN adalah arsitektur jaringan saraf dalam feed-forward yang terdiri dari:
beberapa lapisan konvolusi, masing-masing diikuti oleh lapisan penyatuan, aktivasi
fungsi, dan normalisasi batch opsional. Ini juga terdiri dari
lapisan yang terhubung penuh. Saat sebuah gambar bergerak melalui jaringan, ia mendapatkan
lebih kecil, sebagian besar karena max pooling. Lapisan terakhir menampilkan kelas
prediksi probabilitas.
95
halaman 107
96
halaman 108
BAB 7
CNN di TensorFlow
Bab ini akan menunjukkan cara menggunakan TensorFlow untuk membangun CNN
model. Model CNN dapat membantu Anda membuat pengklasifikasi gambar yang dapat
memprediksi/mengklasifikasikan gambar. Secara umum, Anda membuat beberapa lapisan dalam model
arsitektur dengan nilai awal bobot dan bias. Kemudian Anda menyesuaikan berat badan
dan bias dengan bantuan kumpulan data pelatihan. Ada pendekatan lain
yang melibatkan penggunaan model yang telah dilatih sebelumnya seperti InceptionV3 untuk mengklasifikasikan
gambar. Anda dapat menggunakan pendekatan pembelajaran transfer ini di mana Anda menambahkan
beberapa lapisan (yang parameternya dilatih) di atas lapisan yang telah dilatih sebelumnya
model (dengan nilai parameter utuh) untuk membuat pengklasifikasi yang sangat kuat.
Dalam bab ini, saya akan menggunakan TensorFlow untuk menunjukkan cara mengembangkan
jaringan konvolusi untuk berbagai aplikasi visi komputer. Lebih mudah
untuk mengekspresikan arsitektur CNN sebagai grafik aliran data.
halaman 109
dari tensorflow.contrib.learn.python.learn.datasets.mnist
impor read_data_sets
dari operasi impor tensorflow.python.framework
impor tensorflow sebagai tf
impor numpy sebagai np
Anda memuat data MNIST dan membuat rangkaian kereta dan pengujian.
# Muat data
dari keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
Karena ini adalah masalah klasifikasi multiclass, selalu lebih baik untuk digunakan
pengkodean satu-panas dari nilai-nilai kelas keluaran.
98
halaman 110
Mari kita atur parameter model sekarang karena gambar ini berwarna abu-abu.
Oleh karena itu, kedalaman gambar (saluran) adalah 1.
99
halaman 111
Mari kita deklarasikan variabel model untuk layer yang terhubung penuh dan definisikan
bobot dan bias untuk 2 lapisan terakhir ini.
100
halaman 112
b3 = tf.Variable(tf.truncated_normal([full_connected_size1],
stddev=0.1, dtype=tf.float32))
W_out = tf.Variable(tf.truncated_normal([full_connected_size1,
target_size], stddev=0.1, dtype=tf.float32))
b_out = tf.Variable(tf.truncated_normal([target_size],
stddev=0.1, dtype=tf.float32))
Mari kita buat fungsi pembantu untuk mendefinisikan konvolusi dan maks
lapisan penyatuan.
Sebuah model jaringan saraf didefinisikan dengan dua lapisan tersembunyi dan dua lapisan
lapisan yang terhubung penuh. Unit linier yang diperbaiki digunakan sebagai aktivasi
berfungsi untuk lapisan tersembunyi dan lapisan keluaran akhir.
halaman 113
kembali (keluaran_model_akhir)
model_output = my_conv_net(x_input)
test_model_output = my_conv_net(eval_input)
Anda akan menggunakan fungsi entropi lintas softmax (cenderung bekerja lebih baik untuk
klasifikasi multiclass) untuk menentukan kerugian yang beroperasi pada log.
102
halaman 114
Untuk menentukan akurasi model pada setiap batch, mari kita definisikan
fungsi akurasi.
# Buat pengoptimal
my_optimizer = tf.train.AdamOptimizer(learning_rate, 0.9)
train_step = my_optimizer.minimize(rugi)
# Inisialisasi Variabel
varInit = tf.global_variables_initializer()
sess.run(varInit)
Mari kita mulai melatih model dan mengulang secara acak melalui batch
dari data. Anda ingin mengevaluasi model di kereta dan menguji kumpulan kumpulan
dan mencatat kehilangan dan akurasi.
103
halaman 115
sess.run(train_step, feed_dict=train_dict)
temp_train_loss, temp_train_preds = sess.run([rugi,
prediksi], feed_dict=train_dict)
temp_train_acc = get_accuracy(temp_train_preds, random_y)
eval_index = np.random.choice(len(X_test),
ukuran=ukuran_evaluasi)
eval_x = X_test[eval_index]
eval_x = np.expand_dims(eval_x, 3)
eval_y = test_labels[eval_index]
test_dict = {eval_input: eval_x, eval_target: eval_y}
test_preds = sess.run(test_prediction, feed_dict=test_dict)
temp_test_acc = get_accuracy(test_preds, eval_y)
104
halaman 116
BAB 8
CNN di Keras
Bab ini akan menunjukkan bagaimana menggunakan Keras untuk membangun model CNN.
Model CNN dapat membantu Anda membangun pengklasifikasi gambar yang dapat memprediksi
dan mengklasifikasikan gambar. Secara umum, Anda membuat beberapa lapisan dalam model
arsitektur dengan nilai awal bobot dan bias. Kemudian Anda menyetel
variabel bobot dan bias dengan bantuan kumpulan data pelatihan. Kamu akan
pelajari cara membuat kode di Keras dalam konteks ini. Ada pendekatan lain yang
melibatkan penggunaan model terlatih seperti InceptionV3 dan ResNet50 yang
dapat mengklasifikasikan gambar.
Mari kita definisikan model CNN dan mengevaluasi seberapa baik kinerjanya. Anda
akan menggunakan struktur dengan lapisan konvolusi; maka Anda akan menggunakan maks
menyatukan dan meratakan jaringan untuk sepenuhnya menghubungkan lapisan dan membuat
prediksi.
halaman 117
Selanjutnya, Anda mengimpor tipe model sekuensial dari Keras. Ini hanya
tumpukan linier lapisan jaringan saraf.
106
halaman 118
# untuk mengonversi tipe data kami ke float32 dan menormalkan database kami
X_train=X_train.astype('float32')
X_test=X_test.astype('float32')
cetak(X_train.shape)
107
halaman 119
Kemudian Anda mengkompilasi model dengan menggunakan entropi silang biner sebagai kerugiannya
fungsi dan adagrad sebagai pengoptimal.
#buat model
model=Sekuensial()
model.add(Conv2D(32, (5,5), input_shape=(1,28,28),
aktivasi = 'relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.3)) # Dropout, salah satu bentuk dari
regularisasi
model.tambahkan(Ratakan())
model.add(Padat(240,aktivasi='elu'))
model.add(Dense(num_classes, activation='softmax'))
cetak(model.output_shape)
(Tidak ada, 10)
# Kompilasi modelnya
model.compile(loss='binary_crossentropy', pengoptimal='adagrad',
matriks=['akurasi'])
108
halaman 120
BAB 8 CNN DI KERAS
Kemudian Anda menyesuaikan model dengan menggunakan set data pelatihan dengan mengambil
ukuran batch 200. Model mengambil 200 instance/baris pertama (dari tanggal 1
ke 200) dari kumpulan data pelatihan dan melatih jaringan. Kemudian
model membutuhkan 200 instans kedua (dari tanggal 201 hingga ke-400) untuk
jaringan pelatihan lagi. Dengan cara ini, Anda menyebarkan semua contoh melalui
jaringan. Model ini membutuhkan lebih sedikit memori saat Anda melatih jaringan dengan
lebih sedikit contoh setiap kali. Tetapi ukuran batch kecil tidak menawarkan yang bagus
perkiraan gradien, dan karenanya penyetelan bobot dan bias dapat menjadi
tantangan.
Satu zaman berarti satu maju pass dan satu lulus mundur dari semua yang
contoh pelatihan. Dibutuhkan beberapa iterasi untuk menyelesaikan satu epoch.
Di sini, Anda memiliki 60.000 contoh pelatihan, dan ukuran batch Anda adalah 200, jadi
dibutuhkan 300 iterasi untuk menyelesaikan 1 epoch.
# Sesuaikan modelnya
model.fit(X_train, y_train, validasi_data=(X_test, y_test),
zaman = 1, ukuran_batch = 200)
# Simpan modelnya
# simpan model
model_json= model.to_join()
dengan open("model_json", "w") sebagai json_file:
json_file.write(model_json)
# membuat serial bobot ke HDFS
model.save_weights("model.h5")
109
Halaman 121
Perhatikan bahwa kumpulan data CiFar-10 terdiri dari 60.000 warna 32×32
gambar dalam 10 kelas, dengan 6.000 gambar per kelas. ada 50.000
gambar pelatihan dan 10.000 gambar uji.
110
Halaman 122
numpy.random.seed(biji)
#Praproses data imput untuk Keras
# Bentuk ulang data masukan.
# bentuk ulang menjadi [sampel][saluran][lebar][tinggi]
X_train=X_train.reshape(X_train.shape[0],3,32,32).
astype('float32')
X_test=X_test.reshape(X_test.shape[0],3,32,32).
astype('float32')
111
halaman 123
Kemudian Anda menyesuaikan model dengan menggunakan set data pelatihan dengan mengambil
ukuran batch 200. Anda mengambil 200 instance/baris pertama (dari tanggal 1 hingga
ke-200) dari kumpulan data pelatihan dan latih jaringan. Kemudian Anda mengambil
200 instance kedua (dari tanggal 201 hingga 400) untuk melatih jaringan
lagi. Dengan cara ini, Anda menyebarkan semua instance melalui jaringan. Satu
epoch berarti satu operan ke depan dan satu operan ke belakang dari semua latihan
contoh. Dibutuhkan beberapa iterasi untuk menyelesaikan satu epoch.
Di sini, Anda memiliki 50.000 contoh pelatihan, dan ukuran batch Anda adalah 200, jadi
dibutuhkan 250 iterasi untuk menyelesaikan 1 epoch.
#buat model
model=Sekuensial()
model.add(Conv2D(32, (5,5), input_shape=(3,32,32),
aktivasi = 'relu'))
112
halaman 124
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(32, (5,5), activation='relu',
padding = 'sama'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.3)) # Dropout, salah satu bentuk dari
regularisasi
model.tambahkan(Ratakan())
model.add(Padat(240,aktivasi='elu'))
model.add(Dense(num_classes, activation='softmax'))
cetak(model.output_shape)
model.compile(loss='binary_crossentropy', pengoptimal='adagrad')
#model pas
model.fit(X_train, y_train, validasi_data=(X_test,
y_test), epochs=1, batch_size=200)
Model Terlatih
Di bagian ini, saya akan menunjukkan bagaimana Anda dapat menggunakan model pra-latihan seperti
VGG dan awal untuk membangun classifier.
113
halaman 125
halaman 126
BAB 9
Konsep RNN
Sebuah jaringan saraf berulang adalah jenis jaringan saraf tiruan yang terbaik
cocok untuk mengenali pola dalam urutan data, seperti teks, video,
pidato, bahasa, genom, dan data deret waktu. RNN sangat
algoritma yang kuat yang dapat mengklasifikasikan, mengelompokkan, dan membuat prediksi tentang
data, khususnya deret waktu dan teks.
RNN dapat dilihat sebagai jaringan MLP dengan penambahan loop ke
Arsitektur. Pada Gambar 9-1 , Anda dapat melihat bahwa ada lapisan input (dengan
node seperti x1, x2, dan seterusnya), lapisan tersembunyi (dengan node seperti h1,
h2, dan seterusnya), dan lapisan keluaran (dengan node seperti y1, y2, dan seterusnya).
Ini mirip dengan arsitektur MLP. Perbedaannya adalah bahwa node
dari lapisan tersembunyi saling berhubungan. Dalam RNN/LSTM vanilla (dasar),
node terhubung dalam satu arah. Ini berarti bahwa h2 tergantung pada h1
(dan x2), dan h3 bergantung pada h2 (dan x3). Node di lapisan tersembunyi adalah
ditentukan oleh node sebelumnya di lapisan tersembunyi.
halaman 127
Jenis arsitektur ini memastikan bahwa output pada t=n bergantung pada
masukan pada t=n, t=n-1, …, dan t=1. Dengan kata lain, output tergantung pada
urutan data daripada satu bagian data (Gambar 9-2 ).
116
halaman 128
halaman 129
Konsep LSTM
Memori jangka pendek panjang adalah arsitektur RNN yang dimodifikasi yang menangani
masalah menghilangnya dan meledaknya gradien dan mengatasi
masalah pelatihan selama urutan panjang dan mempertahankan memori. Semua RNN
memiliki loop umpan balik di lapisan berulang. Loop umpan balik membantu
menyimpan informasi dalam "memori" dari waktu ke waktu. Tapi, itu bisa sulit untuk dilatih
RNN standar untuk memecahkan masalah yang membutuhkan pembelajaran temporal jangka panjang
dependensi. Karena gradien fungsi kerugian meluruh secara eksponensial
dengan waktu (fenomena yang dikenal sebagai masalah gradien lenyap ), itu
sulit untuk melatih RNN tipikal. Itulah mengapa RNN dimodifikasi dengan cara
bahwa itu termasuk sel memori yang dapat menyimpan informasi dalam memori
untuk jangka waktu yang lama. RNN yang dimodifikasi lebih dikenal sebagai LSTM. Di dalam
LSTM, satu set gerbang digunakan untuk mengontrol ketika informasi memasuki memori,
yang memecahkan masalah gradien menghilang atau meledak.
Koneksi berulang menambahkan status atau memori ke jaringan dan
memungkinkannya untuk belajar dan memanfaatkan sifat pengamatan yang teratur di dalam
urutan masukan. Memori internal berarti output dari jaringan adalah
tergantung pada konteks terbaru dalam urutan input, bukan apa yang baru saja
disajikan sebagai input ke jaringan.
Mode LSTM
LSTM dapat memiliki salah satu mode berikut:
• Model satu-ke-satu
• Model satu-ke-banyak
• Model banyak-ke-satu
• Model banyak-ke-banyak
118
halaman 130
Angka 9-4 menunjukkan LSTM banyak-ke-satu. Ini menyiratkan bahwa banyak input
membuat satu output dalam model ini.
Gambar 9-4. LSTM banyak-ke-satu
Prediksi Urutan
LSTM paling cocok untuk data urutan. LSTM dapat memprediksi, mengklasifikasikan, dan
menghasilkan data urutan. Sebuah urut berarti urutan pengamatan,
daripada serangkaian pengamatan. Contoh deret adalah deret uji
di mana stempel waktu dan nilai berada dalam urutan (secara kronologis) dari
urutannya. Contoh lain adalah video, yang dapat dianggap sebagai
urutan gambar atau urutan klip audio.
Prediksi berdasarkan urutan data disebut urutan
prediksi . Prediksi urutan dikatakan memiliki empat jenis.
• Klasifikasi urutan
• Pembuatan urutan
• Prediksi urutan-ke-urutan
119
halaman 131
• Keluaran : 17
LSTM
3,5,8,12 Urutan 17
Prediksi pada Model
Klasifikasi Urutan
Klasifikasi urutan memprediksi label kelas untuk urutan yang diberikan. Penggunaannya
kasus adalah deteksi penipuan (yang menggunakan urutan transaksi sebagai input
untuk mengklasifikasikan/memprediksi apakah suatu akun telah diretas atau tidak) dan
klasifikasi siswa berdasarkan kinerja (urutan ujian
tanda selama enam bulan terakhir secara kronologis). Berikut ini contohnya:
• Keluaran : “Meningkat”
LSTM
2,4,6,8 “Meningkat”
Urutan
Model Klasifikasi
120
halaman 132
Generasi Urutan
Pembuatan urutan adalah ketika Anda menghasilkan urutan output baru yang memiliki
properti yang sama dengan urutan input dalam korpus input. Penggunaannya
kasus adalah pembuatan teks (diberikan 100 baris blog, buat baris berikutnya
blog) dan pembuatan musik (diberikan contoh musik, hasilkan
karya musik baru). Berikut ini contohnya:
• Keluaran : [5,7,10,14]
LSTM
Urutan
Genera pada Model
• Keluaran : [23,30,38]
LSTM
Urutan ke
Model Urutan
121
halaman 133
Seperti disebutkan, LSTM digunakan untuk peramalan deret waktu dalam bisnis.
Mari kita lihat model LSTM. Asumsikan bahwa file CSV diberikan di mana
kolom pertama adalah stempel waktu dan kolom kedua adalah nilai. Bisa
mewakili data sensor (IoT).
Mengingat data deret waktu, Anda harus memprediksi nilai untuk masa depan.
122
halaman 134
X, Y = np.array(dataX), np.array(dataY)
kembali X, Y
# perbaiki benih acak untuk reproduktifitas
np.random.seed(230)
# memuat kumpulan data
dataframe = read_csv('sp500.csv', usecols=[0])
plt.plot(dataframe)
plt.tampilkan()
123
halaman 135
# bentuk ulang rangkaian data kereta dan uji menjadi X=t dan Y=t+1
ts_lag = 1
trainX, trainY = create_timeseries(train, ts_lag)
testX, testY = create_timeseries(test, ts_lag)
124
halaman 136
Bab 9 rNN dan LStM
Dalam Gambar 9-6, Anda dapat melihat plot waktu aktual versus perkiraan
seri. Bagian yang berwarna oranye adalah data pelatihan, bagian yang berwarna biru adalah ujian
data, dan bagian yang berwarna hijau adalah keluaran yang diprediksi.
Sejauh ini, kita telah mempelajari konsep RNN, LSTM, dan deret waktu
peramalan dengan model LSTM.
125
halaman 137
LSTM telah digunakan dalam klasifikasi teks. Kami menggunakan LSTM (vanila LSTM
atau LSTM dua arah) untuk membangun pengklasifikasi teks. Pertama, korpus teks adalah
diubah menjadi angka dengan menggunakan penyisipan kata (semantik) seperti
word2vec atau sarung tangan. Kemudian, klasifikasi urutan dilakukan melalui LSTM.
Pendekatan ini menawarkan akurasi yang jauh lebih tinggi daripada kumpulan kata-kata biasa atau
tf-idf diikuti oleh pengklasifikasi ML seperti SVM, Random Forest. Di dalam
Bab 11, kita dapat melihat bagaimana LSTM dapat digunakan untuk pengklasifikasi.
126
halaman 138
BAB 10
Pidato ke Teks
dan sebaliknya
Dalam bab ini, Anda akan belajar tentang pentingnya pidato-ke-teks dan
konversi teks ke ucapan. Anda juga akan belajar tentang fungsi dan
komponen yang diperlukan untuk melakukan konversi jenis ini.
Secara khusus, saya akan membahas yang berikut:
Konversi Ucapan-ke-Teks
Konversi ucapan-ke-teks , dalam istilah awam, berarti aplikasi mengenali
kata-kata yang diucapkan oleh seseorang dan mengubah suara menjadi teks tertulis. Di sana
banyak alasan Anda ingin menggunakan konversi Ucapan-ke-Teks.
128
halaman 140
M f( )= 1125 ln (1 + F / 700 )
-(
Mm1
)= 700 (exp (M / 1125 ) - 1)
129
halaman 141
• frekuensi rendah: Ini adalah tepi pita terendah, dalam hertz. Oleh
defaultnya adalah 0.
• frekuensi tinggi: Ini adalah tepi pita tertinggi, dalam hertz. Oleh
defaultnya adalah sample rate dibagi 2.
130
halaman 142
Fungsi ini mengembalikan array Numpy yang berisi fitur. Setiap baris
berisi satu vektor fitur.
131
halaman 143
Jika Anda menjalankan kode sebelumnya, Anda akan mendapatkan output dalam bentuk berikut:
132
halaman 144
Catatan untuk melihat kode lengkap pengklasifikasi menggunakan fitur MFCC, Anda
dapat mengunjungi www.navinmanaswi.com/SpeechRecognizer.
halaman 145
Berikut adalah kode Python untuk mengonversi file audio menjadi spektogram:
134
halaman 146
• PocketSphinx
• Pidato Google
• Wit.ai
• Houndify
Setelah menggunakan semua ini, saya dapat mengatakan bahwa mereka bekerja dengan cukup baik; NS
Aksen Amerika sangat jelas.
Jika Anda tertarik untuk mengevaluasi keakuratan konversi, Anda
membutuhkan satu metrik: tingkat kesalahan kata (WER).
Di bagian selanjutnya, saya akan membahas masing-masing API yang disebutkan sebelumnya.
Menggunakan PocketSphinx
PocketSphinx adalah API open source yang digunakan untuk konversi ucapan-ke-teks. Dia
adalah mesin pengenalan suara yang ringan, khusus disetel untuk perangkat genggam
dan perangkat seluler, meskipun berfungsi sama baiknya di desktop. Secara sederhana
gunakan perintah pip install PocketSphinx untuk menginstal paket.
135
halaman 147
r = sr.Pengenal()
dengan sr.AudioFile(AUDIO_FILE) sebagai sumber:
audio = r.record(sumber)
mencoba:
print("Sphinx mengira Anda mengatakan " + r.recognize_sphinx(audio))
kecuali sr.UnknownValueError:
print("Sphinx tidak mengerti suara")
kecuali sr.RequestError sebagai e:
print("Kesalahan Sphinx; {0}".format(e))
================================================== ===============
136
halaman 148
137
halaman 149
138
halaman 150
Setelah Anda mengubah pidato menjadi teks, Anda tidak dapat mengharapkan
akurasi 100 persen. Untuk mengukur akurasi, Anda dapat menggunakan WER.
139
halaman 151
Konversi Text-to-Speech
Bagian bab ini berfokus pada konversi teks tertulis ke file audio.
Menggunakan pyttsx
Menggunakan paket Python yang disebut pyttsx, Anda dapat mengonversi teks menjadi audio.
Lakukan pip install pyttsx. Jika Anda menggunakan python 3.6 maka lakukan
pip3 instal pyttsx3.
impor pyttsx
mesin = pyttsx.init()
engine.say("Pesan Anda")
mesin.runDanTunggu()
Menggunakan SAPI
Anda juga dapat menggunakan SAPI untuk melakukan konversi text-to-speech dengan Python.
Menggunakan SpeechLib
Anda dapat mengambil input dari file teks dan mengubahnya menjadi audio menggunakan
SpeechLib, seperti yang ditunjukkan di sini:
140
halaman 152
Bab 10 Bicara ke teks dan Wakil VerSa
aliran = CreateObject("SAPI.SpFileStream")
dari comtypes.gen impor SpeechLib
infile = "SHIVA.txt"
outfile = "SHIVA-audio.wav"
stream.Open(outfile, SpeechLib.SSFMCreateForWrite)
engine.AudioOutputStream = aliran
f = buka(infile, 'r')
theText = f.read()
f.tutup()
engine.speak(teks)
aliran.Tutup()
Sering kali, Anda harus mengedit audio sehingga Anda dapat menghapus suara
dari berkas audio. Bagian selanjutnya menunjukkan caranya.
gelombang impor
sistem impor
impor os
impor csv
origAudio = wave.open('Howard.wav', 'r') #ubah jalur
frameRate = origAudio.getframerate()
nChannels = origAudio.getnchannels()
sampWidth = origAudio.getsampwidth()
nFrames = origAudio.getnframes()
141
halaman 153
hitung = 0
142
halaman 154
Microsoft Azure
Microsoft Azure menyediakan yang berikut ini:
143
halaman 155
• Text to speech : Bahasa Inggris AS, Bahasa Inggris UK, Bahasa Spanyol,
Prancis, Italia, dan Jerman
144
halaman 156
BAB 11
Mengembangkan Chatbot
Sistem kecerdasan buatan yang bertindak sebagai antarmuka untuk manusia dan
interaksi mesin melalui teks atau suara disebut chatbots .
Interaksi dengan chatbots mungkin langsung atau
kompleks. Contoh interaksi langsung bisa bertanya
tentang laporan berita terbaru. Interaksi bisa menjadi lebih kompleks
ketika mereka tentang pemecahan masalah dengan, katakanlah, Android Anda
telepon. Istilah chatbots telah mendapatkan popularitas luar biasa di masa lalu
tahun dan telah berkembang menjadi platform yang paling disukai untuk interaksi pengguna
dan keterlibatan. Sebuah bot , bentuk lanjutan dari ChatBot sebuah, membantu mengotomatisasi
tugas "yang dilakukan pengguna".
Bab tentang chatbot ini akan berfungsi sebagai panduan menyeluruh untuk
apa, bagaimana, di mana, kapan, dan mengapa chatbots!
Secara khusus, saya akan membahas yang berikut:
halaman 157
Mengapa Chatbot?
Penting bagi chatbot untuk memahami informasi apa yang dimiliki pengguna
mencari, disebut niat . Misalkan pengguna ingin tahu yang terdekat
restoran vegetarian; pengguna dapat mengajukan pertanyaan itu dalam banyak kemungkinan
cara. Chatbot (khususnya pengklasifikasi maksud di dalam chatbot)
harus dapat memahami maksudnya karena pengguna ingin mendapatkan
jawaban benar. Padahal, untuk memberikan jawaban yang benar, chatbot harus bisa
memahami konteks, maksud, entitas, dan sentimen. Chatbot harus
bahkan memperhitungkan apa pun yang dibahas dalam sesi. Misalnya,
pengguna mungkin bertanya “Berapa harga ayam biryani disana?”
Meskipun pengguna telah meminta harga, mesin obrolan dapat salah paham
dan asumsikan pengguna sedang mencari restoran. Jadi, sebagai tanggapan,
chatbot dapat memberikan nama restoran.
halaman 158
Gambar 11-1. Bagan alur untuk menunjukkan bagaimana mesin chatbot memproses dan
input string dan memberikan jawaban yang valid.
147
halaman 159
Tokenisasi
Memotong kalimat menjadi kata-kata tunggal (disebut token ) disebut
tokenisasi . Dalam Python, umumnya string diberi token dan disimpan dalam daftar.
148
halaman 160
149
halaman 161
Kata-kata mana yang dianggap sebagai stop word bisa bermacam-macam. Ada
beberapa set kata henti yang telah ditentukan sebelumnya disediakan oleh Natural Language Toolkit
(NLTK), Google, dan lainnya.
StanfordNERTagger("stanford-ner/classifiers/english.all.3class.
distsim.crf.ser.gz",
"stanford-ner/stanford-ner.jar")
cetak(ner_tags)
150
halaman 162
ner_tags = ner.extract_entities(teks)
print("\nEntitas ditemukan:", ner_tags)
untuk e di ner_tags:
rentang = e[0]
tanda = e[1]
entity_text = " ".join(text[i].decode() untuk i dalam jangkauan)
print( str(tag) + " : " + entity_text)
151
halaman 163
pelatih = ner_trainer("mitie/MITIE-models/english/total_word_
feature_extractor.dat".encode("utf-8"))
pelatih.add(contoh)
ner = pelatih.train()
Klasifikasi Niat
Klasifikasi maksud adalah langkah dalam NLU di mana Anda mencoba memahami apa
diinginkan pengguna. Berikut adalah dua contoh input ke chatbot untuk menemukan tempat
di dekat sini:
152
halaman 164
Untuk melakukan ini, Anda perlu melatih model untuk mengklasifikasikan permintaan ke dalam maksud
menggunakan algoritma, dari kalimat ke vektor ke model.
Penyematan Kata
Penyematan kata adalah teknik mengubah teks menjadi angka. Dia
sulit untuk menerapkan algoritma apapun dalam teks. Oleh karena itu, Anda harus mengubahnya menjadi
angka.
Berikut ini adalah berbagai jenis teknik penyisipan kata.
153
halaman 165
Hitung Vektor
Misalkan Anda memiliki tiga dokumen (D1, D2, dan D3) dan ada N
kata-kata unik dalam kelompok dokumen. Anda membuat matriks (D×N),
disebut C, yang dikenal sebagai vektor hitungan . Setiap entri matriks adalah
frekuensi kata unik dalam dokumen itu.
Hampir tidak pemalas Tapi bagi Pooja dia cerdas datang sangat berkelas adalah
H1 0 1 0 01 0 0 0 1 0 1
D2 0 0 1 00 1 1 0 0 0 1
D3 1 0 0 10 1 0 1 0 1 0
Untuk teknik ini, Anda memberi setiap kata dalam kalimat sebuah angka
tergantung pada berapa kali kata itu muncul dalam kalimat itu dan
juga tergantung pada dokumen. Kata-kata yang muncul berkali-kali dalam a
kalimat dan tidak terlalu sering dalam sebuah dokumen akan memiliki nilai yang tinggi.
154
halaman 166
NS Anak laki-laki
Gadis Di mana melakukanAnda hidup
1. 0,60 0,80 0 0 0 0 0
2. 0,60 0 0,80 0 0 0 0
Anda dapat mengimpor paket TFIDF dan menggunakannya untuk membuat tabel ini.
Sekarang mari kita lihat beberapa contoh kode. Anda dapat menggunakan pengklasifikasi vektor dukungan
pada fitur TF-IDF yang diubah dari string permintaan.
155
halaman 167
156
halaman 168
Bab 11 Mengembangkan Chatbot
Word2Vec
Ada berbagai metode untuk mendapatkan vektor kata untuk sebuah kalimat, tetapi
teori utama di balik semua teknik adalah memberi kata-kata yang mirip dengan yang serupa
representasi vektor. Jadi, kata-kata seperti laki - laki dan laki - laki dan perempuan akan memiliki kesamaan
vektor. Panjang setiap vektor dapat diatur. Contoh Word2vec
teknik termasuk GloVe dan CBOW (n-gram dengan atau tanpa skip gram).
Anda dapat menggunakan Word2vec dengan melatihnya untuk kumpulan data Anda sendiri (jika Anda memiliki
cukup data untuk masalah), atau Anda dapat menggunakan data yang telah dilatih sebelumnya. Word2vec
tersedia di Internet. Model yang telah dilatih sebelumnya telah dilatih pada skala besar
dokumen seperti data Wikipedia, tweet, dan lain-lain, dan semuanya hampir
selalu baik untuk masalah.
Contoh beberapa teknik yang dapat Anda gunakan untuk melatih niat Anda
classifier adalah dengan menggunakan 1D-CNN pada vektor kata dari kata-kata dalam sebuah kalimat,
ditambahkan dalam daftar untuk setiap kalimat.
157
halaman 169
158
halaman 170
159
halaman 171
#set pelatihan
untuk kata, saya di word_index.items():
mencoba:
embedding_vector = word_vecs[word]
kecuali:
embedding_vector = Tidak ada
jika embedding_vector bukan None:
embedding_matrix[i] = embedding_vector
print("Penanaman selesai")
vocab_size = len(embedding_matrix)
embedding_layer = Menanamkan(vocab_size,
100,
bobot=[embedding_matrix],
input_length=max_sent_len,
dapat dilatih=Benar)
sequence_input = Input(bentuk=(max_sent_len,), dtype='int32')
# susun setiap kata dari kalimat dalam matriks. Jadi setiap matriks
mewakili sebuah kalimat.
# Setiap baris dalam matriks adalah kata (Vektor Kata) dari sebuah kalimat.
embedded_sequences = embedding_layer(masukan_urutan)
160
halaman 172
# melatih model
model.fit(x, y, epochs=10, batch_size=128)
161
halaman 173
• Beginilah cara Anda mengimpor Gensim dan memuat yang sudah dilatih
model:
genisme impor
#memuat model yang sudah terlatih
model = gensim.models.KeyedVectors.
load_word2vec_format('GoogleNews-vectors-
negatif300.bin', biner=Benar)
• Ini adalah model yang telah dilatih sebelumnya dari Google untuk
Bahasa Inggris, dan itu adalah 300 dimensi.
• Ini adalah cara mencari vektor kata dari sebuah kata dari a
model terlatih:
halaman 174
print(model.most_similar(positive=[Pangeran,
Cewek], negatif=[Laki-laki]))
163
halaman 175
, 5 , 10 , 10 rad rad , 10
oW oW oW oW
Jendela
Ukuran
Konteks
B B B 10+1010+1010+1010+10adag adag sintaksis
Ketergantungan
B
ord2vec
ord2vec, ord2vec, cinta cinta cinta cinta cinta cinta ord2vec ord2vec
Arsitektur W W skip-gram W skip-gram
G G G G G G W W
meter
ra
A
disanaKosakata
P Ukuran3M 1.4M 1.4M 400.000
400.000
400.000
400.000
1.9M2.2M174,000 -
itu O
Corpus
Ukuran100b 100b 100b 6b 6b 6b 6b 42b 840b - -
model w
ined M
Jumlah
Ukuran300 1000 1000 50 100 200 300 300 300 300 1000
t Pra
berbeda
igaword
igaword
5 igaword
5 igaword
5 5
berita
bl 11-1.
oogle n vektor bpedia (wiki2vec)
Ta File ModelG iD gratis Nama freebase
Wikipedia
Wikipedia
Wikipedia
+ g Wikipedia
+ g Perayapan
+ g Perayapan
+ g Ketergantungan
UmumUmum
42b
D 840b Wikipedia
164
halaman 176
Membangun Respon
Respons adalah bagian penting lain dari chatbots. Berdasarkan bagaimana chatbot
balasan, pengguna mungkin tertarik padanya. Setiap kali chatbot dibuat, satu
hal yang harus diingat adalah penggunanya. Anda perlu tahu siapa yang akan
menggunakannya dan untuk tujuan apa akan digunakan. Misalnya, chatbot untuk
situs web restoran hanya akan ditanya tentang restoran dan makanan. Jadi kamu
mengetahui lebih kurang pertanyaan apa yang akan ditanyakan. Oleh karena itu, untuk setiap niat,
Anda menyimpan beberapa jawaban yang dapat digunakan setelah mengidentifikasi maksudnya
sehingga pengguna tidak akan mendapatkan jawaban yang sama berulang kali. Anda juga dapat memiliki
satu maksud untuk pertanyaan di luar konteks; niat itu bisa memiliki banyak
jawaban, dan memilih secara acak, chatbot dapat membalas.
Misalnya, jika maksudnya adalah "halo", Anda dapat memiliki beberapa balasan seperti
sebagai “Halo! Apa kabarmu?" dan “Halo! Apa kabarmu?" dan “Hai! Bagaimana
Bolehkah aku membantumu?"
Chatbot dapat memilih salah satu secara acak untuk balasan.
Dalam kode contoh berikut, Anda mengambil input dari pengguna, tetapi dalam
chatbot asli, maksudnya ditentukan oleh chatbot itu sendiri berdasarkan apa saja
pertanyaan yang diajukan oleh pengguna.
impor acak
maksud = masukan()
output = ["Halo! Apa kabar","Halo! Apa kabar",,"Hai!
Bagaimana saya bisa membantu Anda", "Hei! Di sana", "Haiii", "Halo! Bagaimana bisa saya
membantumu?", "Hei! Ada apa?"]
if(niat == "Hai"):
cetak(pilihan acak(keluaran))
165
halaman 177
• Wit.ai
• Api.ai
• Watson IBM
Penggemar pembuatan bot lainnya dengan keterampilan pemrograman terbatas atau tidak sama sekali
memanfaatkan platform pengembangan bot seperti berikut ini untuk:
membangun chatbot:
• Teks.in
• Oktan AI
• Motion.ai
166
halaman 178
Ada berbagai API yang menganalisis teks. Tiga raksasa besar adalah sebagai
berikut:
• Amazon Lex
• IBM Watson
Layanan Kognitif Microsoft Azure
Mari kita mulai dengan Microsoft Azure.
halaman 179
Amazon Lex
Amazon Lex adalah layanan untuk membangun antarmuka percakapan ke dalam
aplikasi menggunakan suara dan teks. Sayangnya, tidak ada sinonim
opsi, dan tidak ada ekstraksi entitas dan klasifikasi maksud yang tepat.
Berikut ini adalah beberapa manfaat penting menggunakan Amazon Lex:
• Hemat biaya.
IBM Watson
IBM menyediakan IBM Watson API untuk membuat chatbot Anda sendiri dengan cepat. Di dalam
implementasinya, mendekati perjalanan sama pentingnya dengan
perjalanan itu sendiri. Mendidik diri Anda sendiri tentang Watson Conversational AI untuk
dasar-dasar perusahaan dari desain percakapan, dan dampaknya terhadap bisnis Anda,
penting dalam merumuskan rencana tindakan yang berhasil. Persiapan ini akan
memungkinkan Anda untuk berkomunikasi, belajar, dan memantau dengan standar, memungkinkan
bisnis Anda untuk membangun proyek yang siap untuk pelanggan dan sukses.
Desain percakapan adalah bagian terpenting dalam membangun chatbot.
Hal pertama yang harus dipahami adalah siapa pengguna dan apa yang mereka inginkan
meraih.
IBM Watson memiliki banyak teknologi yang dapat Anda integrasikan dengan mudah
di chatbot Anda; beberapa di antaranya adalah Watson Conversation, Watson Tone
Analyzer, pidato ke teks, dan banyak lagi.
168
halaman 180
169
halaman 181
170
halaman 182
BAB 12
halaman 183
OpenCV
OpenCV menyediakan tiga metode untuk pengenalan wajah (lihat Gambar 12-1):
• Eigenfaces
• Fisherfaces
172
halaman 184
BAB 12 DETEKSI DAN PENGENALAN WAJAH
Eigenfaces
Algoritma eigenfaces menggunakan analisis komponen utama untuk membangun
representasi gambar wajah berdimensi rendah, yang akan Anda gunakan sebagai
fitur untuk gambar wajah yang sesuai (Gambar 12-2).
173
halaman 185
Untuk ini, Anda mengumpulkan kumpulan data wajah dengan beberapa gambar wajah
setiap orang yang ingin Anda kenali—seperti memiliki banyak pelatihan
contoh kelas gambar yang ingin Anda beri label dalam klasifikasi gambar. Dengan
kumpulan data gambar wajah ini, dianggap memiliki lebar dan tinggi yang sama
dan idealnya dengan mata dan struktur wajah yang sejajar (x,y)
koordinat, Anda menerapkan dekomposisi nilai eigen dari kumpulan data,
menjaga vektor eigen dengan nilai eigen terbesar yang sesuai.
Mengingat vektor eigen ini, wajah kemudian dapat direpresentasikan sebagai linear
kombinasi dari apa yang disebut Kirby dan Sirovich sebagai eigenfaces . Wajah eigen
algoritma melihat seluruh kumpulan data.
174
halaman 186
LBPH
Anda dapat menganalisis setiap gambar secara mandiri di LBPH. Metode LBPH
agak lebih sederhana, dalam arti bahwa Anda mengkarakterisasi setiap gambar di
kumpulan data secara lokal; ketika gambar baru yang tidak dikenal disediakan, Anda melakukan
analisis yang sama di atasnya dan bandingkan hasilnya dengan masing-masing gambar di
Himpunan data. Cara Anda menganalisis gambar adalah dengan mengkarakterisasi lokal
pola di setiap lokasi pada gambar.
Sementara algoritma eigenfaces bergantung pada PCA untuk membangun low-
representasi dimensi gambar wajah, pola biner lokal (LBP)
metode bergantung pada, seperti namanya, ekstraksi fitur.
Pertama kali diperkenalkan oleh Ahonen et al. dalam makalah tahun 2006 “Pengenalan Wajah
dengan Pola Biner Lokal,” metode ini menyarankan untuk membagi gambar wajah menjadi
kisi 7x7 dari sel berukuran sama (Gambar 12-3 ).
Gambar 12-3. Menerapkan LBPH untuk pengenalan wajah dimulai dengan membagi
gambar wajah menjadi kotak 7x7 dari sel berukuran sama
175
halaman 187
wajah nelayan
Analisis Komponen Utama (PCA), yang merupakan inti dari
Metode Eigenfaces, menemukan kombinasi linear fitur yang memaksimalkan
total varian dalam data. Meskipun ini jelas merupakan cara yang ampuh untuk mewakili
data, itu tidak mempertimbangkan kelas apa pun dan sangat diskriminatif
informasi mungkin hilang saat membuang komponen. Bayangkan sebuah
situasi di mana varians dalam data Anda dihasilkan oleh eksternal
sumber, biarkan itu menjadi cahaya. Komponen yang diidentifikasi oleh PCA tidak
harus mengandung informasi diskriminatif sama sekali, sehingga proyeksi
sampel dioleskan bersama dan klasifikasi menjadi tidak mungkin.
Analisis Diskriminan Linier melakukan kelas-spesifik
pengurangan dimensi dan ditemukan oleh ahli statistik hebat
Pak RA Fisher. Penggunaan beberapa pengukuran dalam taksonomi
masalah. Untuk menemukan kombinasi fitur yang memisahkan
terbaik di antara kelas, Analisis Diskriminan Linier memaksimalkan
rasio antar-kelas ke dalam-kelas tersebar, alih-alih memaksimalkan
sebaran keseluruhan. Idenya sederhana: kelas yang sama harus dikelompokkan
erat bersama, sementara kelas yang berbeda berada sejauh mungkin dari
satu sama lain dalam representasi dimensi yang lebih rendah.
176
halaman 188
Mendeteksi Wajah
Fitur pertama yang Anda perlukan untuk melakukan pengenalan wajah adalah mendeteksi
di mana dalam gambar saat ini ada wajah. Dengan Python Anda dapat menggunakan Haar
filter kaskade dari perpustakaan OpenCV untuk melakukan ini secara efisien.
Untuk implementasi yang ditampilkan di sini, saya menggunakan Anaconda dengan Python 3.5,
OpenCV 3.1.0, dan dlib 19.1.0. Untuk menggunakan kode berikut, pastikan
bahwa Anda memiliki versi ini (atau yang lebih baru).
Untuk melakukan deteksi wajah, beberapa inisialisasi harus dilakukan, seperti:
ditampilkan di sini:
Sisa kode akan menjadi loop tak terbatas yang terus mendapatkan yang terbaru
gambar dari webcam, mendeteksi semua wajah dalam gambar yang diambil, menggambar
persegi panjang di sekitar wajah terbesar yang terdeteksi, dan akhirnya menunjukkan
masukan, keluaran gambar di jendela (Gambar 12-4 ).
177
halaman 189
Anda dapat melakukan ini dengan kode berikut dalam infinite loop:
178
halaman 190
Melacak Wajah
Kode deteksi wajah sebelumnya memiliki beberapa kelemahan.
Pendekatan yang lebih baik untuk ini adalah melakukan deteksi wajah sekali dan
kemudian manfaatkan pelacak korelasi dari perpustakaan dlib yang luar biasa untuk
hanya melacak wajah dari bingkai ke bingkai.
179
halaman 191
Agar ini berfungsi, Anda perlu mengimpor perpustakaan lain dan menginisialisasi
variabel tambahan.
Dalam loop for tak terbatas, Anda sekarang akan menentukan apakah dlib
pelacak korelasi saat ini melacak wilayah dalam gambar. Jika ini adalah
tidak demikian, Anda akan menggunakan kode yang sama seperti sebelumnya untuk menemukan wajah terbesar,
tetapi alih-alih menggambar persegi panjang, Anda menggunakan koordinat yang ditemukan untuk
inisialisasi pelacak korelasi.
180
halaman 192
Sekarang bit terakhir dalam infinite loop adalah untuk memeriksa kembali apakah
pelacak korelasi secara aktif melacak wajah (yaitu, apakah itu hanya mendeteksi a
berhadapan dengan kode sebelumnya, trankingFace=1?). Jika pelacak aktif
melacak wajah di gambar, Anda akan memperbarui pelacak. Tergantung pada
kualitas pembaruan (yaitu, seberapa yakin pelacak tentang apakah itu
masih melacak wajah yang sama), Anda dapat menggambar persegi panjang di sekitar wilayah
ditunjukkan oleh pelacak atau menunjukkan Anda tidak melacak wajah lagi.
181
halaman 193
Seperti yang Anda lihat dalam kode, Anda mencetak pesan ke konsol setiap
kali Anda menggunakan detektor lagi. Jika Anda melihat output dari konsol
saat menjalankan aplikasi ini, Anda akan melihat bahwa meskipun Anda bergerak cukup
sedikit di sekitar layar, pelacaknya cukup bagus dalam mengikuti wajah
sekali terdeteksi.
Pengenalan Wajah
Sistem pengenalan wajah mengidentifikasi nama orang yang ada di
bingkai video dengan mencocokkan wajah di setiap bingkai video dengan yang terlatih
gambar dan mengembalikan (dan menulis dalam file CSV) label jika wajah di
bingkai berhasil dicocokkan. Anda sekarang akan melihat cara membuat wajah
sistem pengenalan langkah demi langkah.
Pertama, Anda mengimpor semua perpustakaan yang diperlukan. pengenalan_wajah adalah
perpustakaan sederhana yang dibangun menggunakan dlibpengenalan wajah canggih juga dibangun
dengan pembelajaran yang mendalam.
Argparse adalah pustaka Python yang memungkinkan Anda menambahkan milik Anda sendiri
argumen ke file; itu kemudian dapat digunakan untuk memasukkan direktori gambar atau a
jalur file pada saat eksekusi.
182
halaman 194
Dalam kode sebelumnya, saat menjalankan file Python ini, Anda harus
tentukan yang berikut: direktori gambar input pelatihan, file video yang
kami akan menggunakan sebagai kumpulan data, dan file CSV keluaran untuk menulis keluaran di masing-masing
jangka waktu.
Dengan menggunakan fungsi sebelumnya, semua file gambar dari folder yang ditentukan
dapat dibaca.
Fungsi berikut menguji frame input dengan pelatihan yang diketahui:
gambar-gambar:
183
halaman 195
Sekarang Anda mendefinisikan fungsi untuk mengekstrak label untuk yang cocok, dikenal
gambar-gambar.
Sekarang tentukan label set pelatihan Anda. Kemudian cocokkan dengan yang diekstraksi
frame dari video input yang diberikan untuk mendapatkan hasil yang diinginkan.
184
halaman 196
Inisialisasi variabel.
185
halaman 197
186
halaman 198
Kemudian Anda membuat model dan memasukkan data pelatihan ke dalam model.
187
halaman 199
Pindah Belajar
Transfer learning memanfaatkan pengetahuan yang diperoleh saat menyelesaikannya
masalah dan menerapkannya pada masalah yang berbeda tetapi terkait.
Di sini Anda akan melihat bagaimana Anda dapat menggunakan jaringan saraf dalam yang telah dilatih sebelumnya
disebut model Inception v3 untuk mengklasifikasikan gambar.
Model Inception cukup mampu mengekstraksi informasi yang berguna
dari sebuah gambar.
188
halaman 200
BAB 12 DETEKSI DAN PENGENALAN WAJAH
189
halaman 201
Muat model yang telah dilatih sebelumnya dan tentukan fungsi untuk mengklasifikasikan apa pun
gambar yang diberikan.
Sekarang setelah model didefinisikan, mari kita periksa untuk beberapa gambar.
Ini memberikan hasil yang benar 91,11 persen, tetapi sekarang jika Anda memeriksa beberapa
orang, inilah yang Anda dapatkan:
190
Halaman 202
191
halaman 203
Sampai sekarang, nilai transfer disimpan dalam file cache. Sekarang Anda akan
membuat jaringan saraf baru.
Tentukan jaringan.
192
halaman 204
halaman 205
halaman 206
195
Halaman 207
optimalkan(num_iteration=1000)
print_test_accuracy(show_example_errors=Benar,
show_confusion_matrix=Benar)
196
Halaman 208
Lebah
Banyak API yang mudah digunakan juga tersedia untuk tugas deteksi wajah dan
pengenalan wajah.
Berikut adalah beberapa contoh API deteksi wajah:
• PixLab
• Trueface.ai
• Kairos
• Wajah++
• LambdaLabs
• Kunci Lemon
• PixLab
Jika Anda ingin deteksi wajah, pengenalan wajah, dan analisis wajah dari satu
penyedia, saat ini ada tiga raksasa besar yang memimpin di sini.
• API Pengakuan Amazon Amazon
• API Wajah Microsoft Azure
197
halaman 209
API Wajah Microsoft Azure akan mengembalikan skor kepercayaan untuk seberapa besar kemungkinannya
itu adalah bahwa dua wajah milik satu orang. Microsoft juga memiliki API lain
seperti berikut ini:
198
halaman 210
Visual Recognition API IBM Watson dapat melakukan beberapa deteksi spesifik
seperti berikut ini:
199
halaman 211
LAMPIRAN 1
halaman 212
202
halaman 213
• rescale: Faktor rescaling. Ini default ke Tidak Ada. Jika Tidak Ada
atau 0, tidak ada penskalaan ulang yang diterapkan. Jika tidak, Anda berlipat ganda
data dengan nilai yang diberikan (sebelum menerapkan
transformasi lainnya).
203
halaman 214
Berikut metode-metodenya:
• Berikut argumennya:
• y: Label.
204
halaman 215
Fungsi ini akan membantu Anda menambah data gambar secara real time, selama
melatih dirinya sendiri, dengan membuat kumpulan gambar. Ini akan dilewati selama
waktu pelatihan.
Fungsi pemrosesan dapat digunakan untuk menulis beberapa fungsi manual
juga, yang tidak disediakan di perpustakaan Keras.
205
halaman 216
LAMPIRAN 2
halaman 217
• PASCAL VOC : Ini adalah kumpulan data yang sangat besar untuk gambar
tugas klasifikasi. Ini memiliki 500.000 instance data.
208
halaman 218
• Kumpulan data kejahatan FBI : Kumpulan data kejahatan FBI luar biasa.
Jika Anda tertarik dengan analisis data deret waktu, Anda
dapat menggunakannya untuk merencanakan perubahan tingkat kejahatan di tingkat nasional
tingkat di atas periode 20 tahun.
209
halaman 219
LAMPIRAN 3
Pencitraan medis:
Format File DICOM
Pencitraan Digital dan Komunikasi dalam Kedokteran (DICOM) adalah jenis
format file yang digunakan dalam domain medis untuk menyimpan atau mentransfer gambar yang diambil
selama berbagai tes dari beberapa pasien.
Mengapa DICOM?
MRI, CT scan, dan sinar-X dapat disimpan dalam format file normal, tetapi
karena keunikan laporan medis, banyak jenis data yang berbeda
diperlukan untuk gambar tertentu.
halaman 220
Standar DICOM adalah format file kompleks yang dapat ditangani oleh
paket berikut:
.
212
halaman 221
Indeks
A Api.ai, 166
bisnis, 147
Kognitif Amazon
desain dan fungsi, 146
Jasa, 143– 144
platform pengembangan, 166
Amazon Lex, 168
Facebook Messenger, Slack, dan
Pengakuan Amazon Amazon
Telegram, 146
api, 198
IBM Watson API, 168
Sistem kecerdasan buatan, 145
maksud, 146
Jaringan saraf tiruan (JST), 45
interaksi, 145
Microsoft Azure, 167
B pengguna potensial, 169
teks pra-pemrosesan dan
API Ucapan Bing, 143
pesan
API Pemeriksaan Ejaan Bing, 167
klasifikasi maksud ( lihat
API Pengenalan Suara Bing, 139
Klasifikasi niat,
Membangun model
chatbot)
model linier, 58
NER ( lihat Entitas bernama
regresi logistik, 62
pengakuan (NER))
File python dan impor, 63
menghilangkan tanda baca
langkah TensorFlow, 57
tanda, 148– 149
menghapus kata berhenti,
C 149– 150
halaman 222
INDEKS
data MNIST
fungsi akurasi, 103 E
sesi grafik, 98
Eigenface, 173– 174
fungsi pembantu, 101
API Emosi, 199
klasifikasi gambar, 98
fungsi kerugian, 102
parameter model, 99 F
operasi, 101 Analisis wajah, 172
fungsi pengoptimal, 103 Deteksi wajah
214
halaman 223
INDEKS
215
halaman 224
INDEKS
216
halaman 225
INDEKS
S
n
SAPI, 140
Pengenalan entitas bernama (NER)
API identifikasi pembicara, 143
definisi, 150
Spektogram
MITIE NER (terlatih), 151
pengklasifikasi, pengenalan suara,
MITIE NER (dilatih sendiri),
132– 133
151– 152
mengkonversi file audio ke gambar,
Stanford NER, 150
133– 134
217
halaman 226
INDEKS
218
halaman 227
INDEKS
219