Jaringan saraf convolutional dan integrasinya di iOS (bagian 1)


Sarana implementasi.

Berbagai algoritma pembelajaran mesin diintegrasikan ke dalam banyak bahasa pemrograman tingkat tinggi. Yang paling populer dan paling cepat berkembang adalah Python.

TensorFlow adalah perpustakaan perangkat lunak pembelajaran mesin terbuka yang dikembangkan oleh Google untuk menyelesaikan masalah pembangunan dan pelatihan jaringan saraf untuk secara otomatis menemukan dan mengklasifikasikan gambar, mencapai kualitas persepsi manusia. API utama untuk bekerja dengan perpustakaan diimplementasikan untuk Python.

Keras adalah perpustakaan jaringan saraf terbuka. Ini merupakan tambahan untuk kerangka kerja TensorFlow dan Theano. Ini ditujukan untuk pekerjaan operasional dengan jaringan pembelajaran yang mendalam, sementara dirancang untuk menjadi kompak, modular dan dapat diperluas.

Versi terbaru dari Python 3.7.2 dipilih sebagai penerjemah. Lingkungan pengembangan adalah Komunitas PyCharm.

Persiapan data.

Di dunia modern, untuk sebagian besar tugas AI, tidak perlu mengumpulkan kumpulan data secara manual, ada banyak sumber daya di mana, setelah pendaftaran, dimungkinkan untuk mengunduh kumpulan data yang sudah jadi. Set data dengan sepuluh digit dalam bahasa isyarat dipilih (Gbr. 1).

Fig. 1. - Angka dalam bahasa isyarat.

Algoritma perlu mendeteksi keberadaan gerakan di foto dan mengklasifikasikannya dengan angka dari 0 hingga 9. Sebelum membangun arsitektur jaringan saraf, Anda perlu menyiapkan data untuk pelatihannya. Pertama, data Bahasa Isyarat Digit Diunduh. File pertama berisi 2063 gambar hitam dan putih dengan angka dalam bahasa isyarat. Gambar memiliki ukuran 64x64 piksel. File kedua berisi label (vektor) yang sesuai dengan gambar.

Nilai piksel dalam gambar dinormalisasi dan berada dalam interval (0,1). Anda dapat langsung menggunakannya untuk memasuki jaringan saraf, tetapi hasil yang paling optimal akan tercapai jika Anda mengikuti prosedur standardisasi. Setelah eksekusi, aturan akan dipenuhi untuk setiap matriks piksel: Nilai

rata - rata dalam matriks adalah nol.
Dispersi dalam matriks adalah satu.

Foto distandarisasi dan ditambahkan ke array baru untuk kombinasi selanjutnya dengan data sebelumnya (

Gbr. 2) Gbr. 2. - Prosedur untuk memuat dan memproses gambar.

Arsitektur jaringan saraf.

Network_sign_lang.py - file proyek utama di mana jaringan saraf dijelaskan. Pada awal skrip, beberapa variabel global dari jaringan saraf dijelaskan (Gbr. 3).

Fig. 3. - Opsi global.

Batch_size - jumlah gambar yang dimasukkan ke dalam jaringan saraf untuk setiap iterasi. Num_classes - jumlah kelas yang akan diprediksi oleh model. Img_size - ukuran gambar yang dipasok ke lapisan input.

Fungsi train_test_split () dari pustaka Sklearn diimpor ke proyek, ia membagi array X dan y dalam rasio 80:20 ke dalam sampel pelatihan dan pengujian, dan juga secara acak mencampur data sehingga mereka tidak diurutkan berdasarkan kelas.

Kemudian model diinisialisasi (Gbr. 4), lapisan pertama Conv2D ditambahkan. Gambar dari array Xtrain adalah input, dimensi ruang output ditunjukkan - 64, inti konvolusi - 4x4, langkah konvolusi dan fungsi aktivasi lapisan ReLU.

Fig. 4. - Jaringan syaraf

Karena jaringan saraf biasanya menggunakan jumlah data pelatihan yang jauh lebih besar, model yang dibangun cenderung untuk dilatih ulang. Untuk menghindari hal ini, metode regularisasi yang efektif, seperti Dropout, digunakan. Lapisan ini akan mengecualikan persentase yang ditunjukkan dari neuron acak sehingga tidak ada kekenyangan di antara lapisan. Angka 0,5 akan berarti bahwa pada setiap batch algoritma akan mengecualikan setengah dari neuron acak. Lapisan utama kedua juga mirip dengan yang pertama - convolutional. (Conv2D)

Berikutnya adalah lapisan penyatuan (MaxPooling2D). Ini berfungsi sebagai filter lain untuk output model. Karena ketika menampilkan angka-angka secara horizontal atau vertikal, makna gambar tidak berubah, jaringan saraf harus mengklasifikasikannya secara merata.

Lapisan datar berfungsi sebagai penghubung antara data yang diperoleh oleh algoritma dan vektor output dengan prediksi. Lapisan terakhir dari jaringan adalah lapisan Padat dengan fungsi aktivasi sofmax. Fungsi ini memungkinkan Anda untuk mendapatkan vektor probabilitas yang dinormalisasi untuk setiap kelas, di mana jumlah probabilitas akan sama dengan satu.

Selanjutnya, Anda perlu mengkompilasi model yang dibuat dengan menentukan parameter berikut: metrik, fungsi kehilangan, dan pengoptimal. Sebagai metrik, akurasi dipilih - persentase contoh yang diklasifikasikan dengan benar. Fungsi kerugian adalah kategorical_crossentropy. Algoritma Optimasi - Adam. Sebelum memulai pelatihan, beberapa panggilan balik ditambahkan. EarlyStopping - berhenti belajar jaringan saraf ketika akurasinya berhenti meningkat dengan zaman pembelajaran. ModelCheckpoint - menyimpan bobot model terbaik ke file untuk digunakan nanti.

Pelatihan jaringan saraf dimulai dengan menyimpan data tentang prosesnya ke dalam variabel historis. Validation_split - Mengambil sepuluh persen dari data pelatihan untuk validasi, yang merupakan cara lain untuk mengatur.

Ukuran sampel pelatihan adalah 1965 contoh, sampel uji adalah 547, dan sampel validasi adalah 219. Setelah menyelesaikan proses pelatihan, grafik dibangun dari ketergantungan keakuratan yang diperoleh pada data pelatihan dan tes (Gbr. 5).

Gbr.5. - Jadwal latihan.

Grafik menunjukkan bahwa model disimpan pada era ke-15 (dengan akurasi terbesar dan kesenjangan terkecil antara Xtrain dan Xtest).

Langkah selanjutnya adalah memuat jaringan saraf yang dihasilkan ke skrip lain untuk memverifikasi fungsinya. Nilai-nilai metrik pada data uji ditampilkan (Gbr. 6).

Fig. 6. - Memeriksa kinerja model.

Berdasarkan hasil metrik, kita dapat menyimpulkan bahwa model tidak berbeda jauh. Semakin rendah indeks fungsi kerugian, semakin yakin prediksi algoritma. Keakuratan atau kesetiaan model menunjukkan persentase foto yang diklasifikasikan dengan benar, yang berarti bahwa semakin tinggi, semakin baik jaringan saraf. Akibatnya, lebih logis untuk menggunakan model pertama yang diperoleh sebagai hasil dari penghentian awal pendidikan.

Kami akan berbicara tentang preprocessing data dan integrasi jaringan saraf format tertentu dalam aplikasi iOS di bagian selanjutnya.

All Articles