Pengarang: Abdellah Hallou (LinkedIn, Twitter)
Selamat datang ke Panduan Permulaan Projek Pembelajaran Dalam! Tutorial ini berfungsi sebagai sumber yang komprehensif untuk sesiapa sahaja yang ingin menyelami dunia pembelajaran mendalam yang menarik. Sama ada anda seorang pemula atau pembangun yang berpengalaman, panduan ini akan membawa anda melalui proses membina projek pembelajaran mendalam dari awal hingga akhir.
Dalam tutorial ini, anda akan mempelajari langkah penting yang terlibat dalam mencipta dan menggunakan model pembelajaran mendalam dalam apl mudah alih. Kami akan membincangkan topik berikut:
Menyediakan data: Kami akan meneroka pelbagai kaedah untuk prapemprosesan data untuk memastikan set data yang mantap dan boleh dipercayai untuk latihan.
Penciptaan model: Anda akan mengetahui cara mereka bentuk dan membina model CNN anda.
Melatih model: Kami akan menyelidiki proses melatih model pembelajaran mendalam anda menggunakan TensorFlow.
Pengedaran dalam apl mudah alih: Setelah model anda dilatih, kami akan membimbing anda melalui langkah-langkah untuk menyepadukannya ke dalam apl mudah alih menggunakan TensorFlow Lite. Anda akan faham cara membuat ramalan semasa dalam perjalanan!
Tutorial ini sesuai untuk pemula dan pembangun pertengahan dengan pemahaman asas tentang konsep pembelajaran mendalam dan pengaturcaraan Python. Sama ada anda seorang saintis data, peminat pembelajaran mesin atau pembangun aplikasi mudah alih, panduan ini akan melengkapkan anda dengan pengetahuan yang diperlukan untuk memulakan projek pembelajaran mendalam anda.
Jika anda menghadapi sebarang isu, mempunyai soalan atau memerlukan penjelasan lanjut semasa mengikuti tutorial ini, jangan teragak-agak untuk mencipta isu GitHub dalam repositori Dari-Data-ke-Pengeluaran ini. Saya berbesar hati untuk membantu anda dan memberikan bimbingan yang diperlukan.
Untuk mencipta isu, klik pada tab "Isu" di bahagian atas halaman repositori ini dan klik butang "Isu baharu". Sila berikan sebanyak mungkin konteks dan perincian tentang masalah yang anda hadapi atau soalan yang anda ada. Ini akan membantu saya memahami kebimbangan anda dengan lebih baik dan memberi anda respons yang cepat dan tepat.
Maklum balas anda adalah berharga dan boleh membantu menambah baik tutorial ini untuk pengguna lain juga. Jadi, jangan teragak-agak untuk menghubungi jika anda memerlukan sebarang bantuan. Mari belajar dan berkembang bersama!
Untuk bermula, pastikan anda memasang kebergantungan dan perpustakaan yang diperlukan. Tutorial dibahagikan kepada bahagian yang mudah diikuti, setiap satu merangkumi aspek khusus aliran kerja projek pembelajaran mendalam. Jangan ragu untuk melompat ke bahagian yang paling anda minati atau ikuti dari awal hingga akhir.
Adakah anda bersedia?
Mari mulakan import yang diperlukan untuk kod kami. Kami akan menggunakan set data Fashion Mnist dalam tutorial ini.
# Import the necessary libraries from __future__ import print_function import keras from google.colab import drive import os import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization from keras.layers import Conv2D, MaxPooling2D from keras.wrappers.scikit_learn import KerasClassifier from keras import backend as K from sklearn.model_selection import GridSearchCV import tensorflow as tf from keras.utils.vis_utils import plot_model import matplotlib.pyplot as plt
Dalam mana-mana projek pembelajaran mendalam, memahami data adalah penting. Sebelum menyelami penciptaan dan latihan model, mari mulakan dengan memuatkan data dan mendapatkan cerapan tentang struktur, pembolehubah dan ciri keseluruhannya.
# Load the Fashion MNIST dataset fashion_mnist = tf.keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
Sekarang data dimuatkan, mari kita lakukan beberapa analisis data penerokaan untuk mendapatkan pemahaman yang lebih baik tentang ciri-cirinya.
print("Shape of the training data : ",x_train.shape) print("Shape of the testing data : ",x_test.shape)
Shape of the training data : (60000, 28, 28) Shape of the testing data : (10000, 28, 28)
Dataset Fashion MNIST mengandungi 70,000 imej skala kelabu dalam 10 kategori. Imej menunjukkan artikel pakaian individu pada peleraian rendah (28 kali 28 piksel), seperti yang dilihat di sini:
60,000 imej digunakan untuk melatih rangkaian dan 10,000 imej untuk menilai sejauh mana rangkaian belajar mengelaskan imej dengan tepat.
# Printing unique values in training data unique_labels = np.unique(y_train, axis=0) print("Unique labels in training data:", unique_labels)
Unique labels in training data: [0 1 2 3 4 5 6 7 8 9]
Label ialah tatasusunan integer, antara 0 hingga 9. Ini sepadan dengan kelas pakaian yang diwakili oleh imej:
| Label | RClass |
| - |-|
| 0 | T-shirt/top|
| 1 | Seluar|
| 2 |Pullover|
| 3 |Pakaian|
| 4 |Kot|
| 5 |Sandal|
| 6 |Baju|
| 7 |Sneaker |
| 8 |Beg|
| 9 | But buku lali |
Memandangkan nama kelas tidak disertakan dengan set data, simpannya di sini untuk digunakan kemudian apabila memplot imej:
# Numeric labels numeric_labels = np.sort(np.unique(y_train, axis=0)) # String labels string_labels = np.array(['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']) # Mapping numeric labels to string labels numeric_to_string = dict(zip(numeric_labels, string_labels)) print("Numeric to String Label Mapping:") print(numeric_to_string)
Numeric to String Label Mapping: {0: 'T-shirt/top', 1: 'Trouser', 2: 'Pullover', 3: 'Dress', 4: 'Coat', 5: 'Sandal', 6: 'Shirt', 7: 'Sneaker', 8: 'Bag', 9: 'Ankle boot'}
Data mesti dipraproses sebelum melatih rangkaian.
Kami mulakan dengan mentakrifkan bilangan kelas dalam set data kami (iaitu 10 dalam kes ini) dan dimensi imej input (28x28 piksel).
# Import the necessary libraries from __future__ import print_function import keras from google.colab import drive import os import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization from keras.layers import Conv2D, MaxPooling2D from keras.wrappers.scikit_learn import KerasClassifier from keras import backend as K from sklearn.model_selection import GridSearchCV import tensorflow as tf from keras.utils.vis_utils import plot_model import matplotlib.pyplot as plt
Bahagian ini bertanggungjawab untuk membentuk semula data imej input agar sepadan dengan format yang dijangkakan untuk model rangkaian saraf. Format bergantung pada bahagian belakang yang digunakan (cth., TensorFlow atau Theano). Dalam coretan ini, kami menyemak format data imej menggunakan K.image_data_format() dan menggunakan pembentukan semula yang sesuai berdasarkan hasilnya.
# Load the Fashion MNIST dataset fashion_mnist = tf.keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
Nilai piksel imej dalam data berada dalam julat 0 hingga 255.
Skalakan nilai ini kepada julat 0 hingga 1 sebelum menyuapkannya kepada model CNN.
print("Shape of the training data : ",x_train.shape) print("Shape of the testing data : ",x_test.shape)
Tukar label kelas (diwakili sebagai integer) kepada format matriks kelas binari, yang diperlukan untuk masalah pengelasan berbilang kelas.
Shape of the training data : (60000, 28, 28) Shape of the testing data : (10000, 28, 28)
Dalam langkah ini, kami mentakrifkan dan membina model rangkaian neural convolutional (CNN) untuk klasifikasi imej. Seni bina model terdiri daripada berbilang lapisan seperti lapisan konvolusi, pengumpulan, keciciran dan padat. Fungsi build_model mengambil bilangan kelas, latihan dan data ujian sebagai input dan mengembalikan sejarah latihan dan model yang dibina.
# Printing unique values in training data unique_labels = np.unique(y_train, axis=0) print("Unique labels in training data:", unique_labels)
Unique labels in training data: [0 1 2 3 4 5 6 7 8 9]
# Numeric labels numeric_labels = np.sort(np.unique(y_train, axis=0)) # String labels string_labels = np.array(['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']) # Mapping numeric labels to string labels numeric_to_string = dict(zip(numeric_labels, string_labels)) print("Numeric to String Label Mapping:") print(numeric_to_string)
Untuk menilai prestasi model terlatih, kami menilainya pada data ujian. Kaedah penilaian digunakan untuk mengira kehilangan dan ketepatan ujian. Metrik ini kemudian dicetak ke konsol.
Numeric to String Label Mapping: {0: 'T-shirt/top', 1: 'Trouser', 2: 'Pullover', 3: 'Dress', 4: 'Coat', 5: 'Sandal', 6: 'Shirt', 7: 'Sneaker', 8: 'Bag', 9: 'Ankle boot'}
num_classes = 10 # input image dimensions img_rows, img_cols = 28, 28
if K.image_data_format() == 'channels_first': x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) input_shape = (1, img_rows, img_cols) else: x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) input_shape = (img_rows, img_cols, 1)
Selepas melatih model, kami menyimpannya dalam format fail Hierarchical Data Format (HDF5) menggunakan kaedah save. Model tersebut kemudiannya dieksport ke Google Drive dengan memanggil fungsi move_to_drive. Selain itu, model ini ditukar kepada format TensorFlow Lite menggunakan fungsi h52tflite dan model TFLite yang terhasil turut disimpan dalam Google Drive. Laluan model yang disimpan dan model TFLite dikembalikan.
x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255
Untuk menggambarkan ramalan model, kami memilih set rawak imej ujian. Model meramalkan label kelas untuk imej ini menggunakan kaedah ramalan. Label yang diramalkan kemudiannya dibandingkan dengan label kebenaran tanah untuk memaparkan imej bersama-sama dengan label ramalan yang sepadan menggunakan matplotlib.
# convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes)
untuk mendapatkan maklumat lanjut tentang model, semak sumber ini:
Sebelum membuat projek Flutter baharu, pastikan Flutter SDK dan keperluan berkaitan pembangunan apl Flutter lain dipasang dengan betul: https://docs.flutter.dev/get-started/install/windows
Selepas projek telah disediakan, kami akan melaksanakan UI untuk membolehkan pengguna mengambil gambar atau memuat naik imej dari galeri dan melakukan pengecaman objek menggunakan model TensorFlow Lite yang dieksport.
Mula-mula, kita perlu memasang pakej ini:
Untuk berbuat demikian, salin coretan kod berikut dan tampalkannya ke dalam fail pubspec.yaml projek:
# Import the necessary libraries from __future__ import print_function import keras from google.colab import drive import os import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization from keras.layers import Conv2D, MaxPooling2D from keras.wrappers.scikit_learn import KerasClassifier from keras import backend as K from sklearn.model_selection import GridSearchCV import tensorflow as tf from keras.utils.vis_utils import plot_model import matplotlib.pyplot as plt
Import pakej yang diperlukan dalam fail main.dart projek
# Load the Fashion MNIST dataset fashion_mnist = tf.keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
Untuk mendayakan kefungsian kamera, kami akan menggunakan pakej kamera. Mula-mula, import pakej yang diperlukan dan nyatakan pengawal kamera. Gunakan fungsi availableCameras() untuk mendapatkan senarai kamera yang tersedia. Dalam tutorial ini, kami akan menggunakan kamera pertama dalam senarai.
print("Shape of the training data : ",x_train.shape) print("Shape of the testing data : ",x_test.shape)
Buat StatefulWidget baharu yang dipanggil CameraScreen yang akan mengendalikan pratonton kamera dan fungsi tangkapan imej. Dalam kaedah initState(), mulakan pengawal kamera dan tetapkan pratetap resolusi. Selain itu, laksanakan kaedah _takePicture(), yang menangkap imej menggunakan pengawal kamera.
Shape of the training data : (60000, 28, 28) Shape of the testing data : (10000, 28, 28)
Untuk membolehkan pengguna memuat naik imej dari galeri, import pakej image_picker. Laksanakan kaedah _pickImage(), yang menggunakan kelas ImagePicker untuk memilih imej daripada galeri. Setelah imej dipilih, ia boleh diproses menggunakan kaedah _processImage().
# Printing unique values in training data unique_labels = np.unique(y_train, axis=0) print("Unique labels in training data:", unique_labels)
Untuk melakukan pengecaman objek, kami akan menggunakan TensorFlow Lite. Mulakan dengan mengimport pakej tflite. Dalam kaedah _initTensorFlow(), muatkan model TensorFlow Lite dan label daripada aset. Anda boleh menentukan model dan melabel laluan fail serta melaraskan tetapan seperti bilangan urutan dan penggunaan perwakilan GPU.
# Import the necessary libraries from __future__ import print_function import keras from google.colab import drive import os import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten, BatchNormalization from keras.layers import Conv2D, MaxPooling2D from keras.wrappers.scikit_learn import KerasClassifier from keras import backend as K from sklearn.model_selection import GridSearchCV import tensorflow as tf from keras.utils.vis_utils import plot_model import matplotlib.pyplot as plt
Laksanakan kaedah _objectRecognition(), yang mengambil laluan fail imej sebagai input dan menjalankan model TensorFlow Lite pada imej. Kaedah mengembalikan label objek yang dikenali.
# Load the Fashion MNIST dataset fashion_mnist = tf.keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
Apabila imej diproses, paparkan hasilnya dalam kotak dialog menggunakan kaedah showDialog(). Sesuaikan dialog untuk menunjukkan label objek yang dikenali dan berikan pilihan untuk membatalkan.
print("Shape of the training data : ",x_train.shape) print("Shape of the testing data : ",x_test.shape)
Shape of the training data : (60000, 28, 28) Shape of the testing data : (10000, 28, 28)
Atas ialah kandungan terperinci Daripada Data kepada Penerapan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!