Τα νευρωνικά δίκτυα είναι μια σημαντική έννοια στους τομείς της τεχνητής νοημοσύνης και της μηχανικής μάθησης. Αποτελούνται από διασυνδεδεμένους κόμβους, οργανωμένους σε στρώματα και μιμούνται τον τρόπο λειτουργίας του ανθρώπινου εγκεφάλου. Οι κόμβοι αντιπροσωπεύουν τους νευρώνες του ανθρώπινου εγκεφάλου.
Μπορείτε να δημιουργήσετε το δικό σας απλό νευρωνικό δίκτυο ταξινόμησης πολλαπλών κλάσεων. Εκπαιδεύστε το να ταξινομεί χειρόγραφα ψηφία χρησιμοποιώντας το σύνολο δεδομένων MNIST. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε την όραση υπολογιστή για να ταξινομήσετε τα δικά σας χειρόγραφα ψηφία.
Τι είναι η ταξινόμηση πολλαπλών κατηγοριών;
Η ταξινόμηση πολλαπλών κλάσεων είναι ένας τύπος μηχανικής μάθησης που μπορεί να ταξινομήσει τα δεδομένα σε περισσότερες από δύο κατηγορίες. Τα νευρωνικά δίκτυα χρησιμοποιούν τον ταξινομητή softmax για να κατανείμουν την πιθανότητα σε πιθανές κλάσεις.
Μπορείτε να χρησιμοποιήσετε ταξινόμηση πολλαπλών κλάσεων για να ταξινομήσετε χειρόγραφες εικόνες από το σύνολο δεδομένων MNIST σε 10 κατηγορίες. Αυτές οι κατηγορίες θα αντιστοιχούν στα ψηφία 0 έως 9.
Κατανόηση του συνόλου δεδομένων MNIST
Το σύνολο δεδομένων MNIST είναι ένα δημοφιλές σύνολο δεδομένων αναφοράς για αλγόριθμους μηχανικής μάθησης και όρασης υπολογιστών. Περιέχει 70.000 χειρόγραφες εικόνες σε κλίμακα του γκρι με μέγεθος 28 επί 28 pixel. Τα χειρόγραφα ψηφία είναι στην περιοχή από 0 έως 9.
Πριν δημιουργήσετε οποιοδήποτε μοντέλο μηχανικής εκμάθησης, είναι σημαντικό να κατανοήσετε τι περιέχει το σύνολο δεδομένων σας. Η κατανόηση του συνόλου δεδομένων θα σας επιτρέψει να εκτελέσετε καλύτερη προεπεξεργασία δεδομένων.
Προετοιμασία του Περιβάλλοντος σας
Για να ακολουθήσετε αυτό το σεμινάριο, θα πρέπει να είστε εξοικειωμένοι με το βασικά της Python. Θα πρέπει επίσης να έχετε ένα βασικές γνώσεις μηχανικής μάθησης. Τέλος, θα πρέπει να αισθάνεστε άνετα χρησιμοποιώντας το Jupyter Notebook ή το Google Colab.
Ο πλήρης πηγαίος κώδικας είναι διαθέσιμος σε α Αποθετήριο GitHub.
Δημιουργήστε ένα νέο σημειωματάριο Jupyter ή συνδεθείτε στο Google Colab. Εκτελέστε αυτήν την εντολή για να εγκαταστήσετε τα απαιτούμενα πακέτα:
!pip εγκατάσταση numpy matplotlib tensorflow opencv-python
Θα χρησιμοποιήσετε:
- Matplotlib για οπτικοποίηση δεδομένων.
- NumPy για χειρισμό πινάκων.
- TensorFlow για να δημιουργήσετε και να εκπαιδεύσετε το μοντέλο σας.
- OpenCV για να τροφοδοτήσετε το μοντέλο με τα δικά σας χειρόγραφα ψηφία.
Εισαγωγή των Απαραίτητων Ενοτήτων
Εισαγάγετε τα πακέτα που εγκαταστήσατε στο περιβάλλον σας. Αυτό θα σας επιτρέψει αργότερα να καλέσετε και να χρησιμοποιήσετε τις λειτουργίες και τις μονάδες τους στον κώδικά σας.
εισαγωγή tensorflow όπως και tf
από tensorflow εισαγωγή κεράς
εισαγωγή matplotlib.pyplot όπως και plt
%matplotlib ενσωματωμένο
εισαγωγή μουδιασμένος όπως και np
εισαγωγή cv2
Η δεύτερη γραμμή κώδικα εισάγει τη μονάδα Keras από το Βιβλιοθήκη Google TensorFlow. Θα χρησιμοποιήσετε το Keras για να εκπαιδεύσετε το βαθύ νευρωνικό σας δίκτυο με το TensorFlow ως backend.
Φόρτωση και προβολή του συνόλου δεδομένων
Το σύνολο δεδομένων MNIST είναι ενσωματωμένο στο Keras. Φορτώστε το σύνολο δεδομένων MNIST και χωρίστε το σε σετ εκπαίδευσης και δοκιμών. Θα χρησιμοποιήσετε το σετ εκπαίδευσης για να εκπαιδεύσετε το μοντέλο σας και το σετ δοκιμών για να αξιολογήσετε την ακρίβεια του μοντέλου σας στην ταξινόμηση νέων αόρατων εικόνων.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Ελέγξτε τη διάρκεια της προπόνησης και των σετ δοκιμών. Το σύνολο δεδομένων MNIST έχει 60.000 εικόνες για εκπαίδευση και 10.000 εικόνες για δοκιμή.
len (X_train)
len (X_test)
Ελέγξτε το σχήμα της πρώτης εικόνας στο σύνολο δεδομένων MNIST, το οποίο πρέπει να είναι 28 επί 28 pixel. Στη συνέχεια, εκτυπώστε τις τιμές των pixel και οπτικοποιήστε το χρησιμοποιώντας το Matplotlib.
X_train[0].σχήμα
X_train[0]
plt.matshow (X_train[0])
y_train[0]
Η έξοδος της οπτικοποίησης είναι η εξής:
Η οπτικοποιημένη εικόνα δείχνει ότι η πρώτη εικόνα στο σύνολο δεδομένων περιέχει τον αριθμό πέντε.
Προεπεξεργασία δεδομένων
Πριν χρησιμοποιήσετε τα δεδομένα στο σύνολο δεδομένων για την εκπαίδευση και τη δοκιμή του μοντέλου σας, πρέπει να το προεπεξεργαστείτε. Η προεπεξεργασία ενισχύει την ακρίβεια ενός μοντέλου τυποποιώντας τα δεδομένα.
Κανονικοποίηση των τιμών των εικονοστοιχείων
Κανονικοποιήστε τις τιμές pixel των εικόνων στο σύνολο δεδομένων διαιρώντας κάθε τιμή με 255. Οι τιμές των pixel του μη κανονικοποιημένου συνόλου δεδομένων κυμαίνονται από 0 έως 255 με το μηδέν να είναι μαύρο και το 255 να είναι λευκό. Η διαίρεση κάθε τιμής εικονοστοιχείου με το 255 διασφαλίζει ότι κάθε εικονοστοιχείο βρίσκεται στην περιοχή μεταξύ 0 και 1. Αυτό διευκολύνει το μοντέλο να μάθει τα σχετικά χαρακτηριστικά και μοτίβα στα δεδομένα.
X_train = X_train / 255
X_test = X_test / 255
Στη συνέχεια, εκτυπώστε τις τιμές pixel της πρώτης εικόνας.
X_train[0]
Παρατηρήστε ότι βρίσκονται τώρα στην περιοχή μεταξύ 0 και 1.
Μετατροπή των πινάκων εικόνας σε πίνακα 1D
Το επίπεδο εισόδου του νευρωνικού δικτύου αναμένει γενικά εισόδους 1D, επομένως δημιουργήστε έναν πίνακα 1D με τις τιμές pixel της εικόνας. Για να το κάνετε αυτό, χρησιμοποιήστε τη συνάρτηση reshape() με τον αριθμό των raw οριστεί στον αριθμό των εικόνων στο σύνολο δεδομένων.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_train_flattened.σχήμα
X_train_flattened[0]
Οι εικόνες σας είναι τώρα έτοιμες για εκπαίδευση και δοκιμή του μοντέλου.
Δημιουργία του μοντέλου βαθιάς νευρωνικού δικτύου
Δημιουργήστε ένα διαδοχικό μοντέλο με τη μονάδα Keras του Tensorflow χρησιμοποιώντας ένα επίπεδο εισόδου, δύο κρυφά επίπεδα και ένα επίπεδο εξόδου. Ορίστε το σχήμα εισαγωγής σε 28 επί 28 καθώς αυτό είναι το σχήμα των αρχικών εικόνων στο σύνολο δεδομένων. Χρησιμοποιήστε 128 κόμβους για τα κρυφά επίπεδα. Το επίπεδο εξόδου θα πρέπει να έχει μόνο 10 νευρώνες, καθώς ταξινομείτε μόνο ψηφία 0 έως 9.
μοντέλο = κεράς. Ακολουθητικός([
κεράς.στρώσεις. Ισιώνω (input_shape=(28, 28)),κεράς.στρώσεις. Πυκνός(128, ενεργοποίηση="relu"),
κεράς.στρώσεις. Πυκνός(128, ενεργοποίηση="relu"),
κεράς.στρώσεις. Πυκνός(10, ενεργοποίηση='softmax')
])
Μεταγλωττίστε το μοντέλο χρησιμοποιώντας το Αδάμ βελτιστοποιητής, αραιή_κατηγορική_διασταυρούμενη ως η συνάρτηση απώλειας και η μέτρηση για την αξιολόγηση της απόδοσης του μοντέλου ως ακρίβεια. Στη συνέχεια, προσαρμόστε τα δεδομένα εκπαίδευσης στο μοντέλο και ορίστε τον αριθμό των εποχών σε πέντε.
model.compile (βελτιστοποιητής='Αδάμ',
απώλεια='sparse_categorical_crossentropy',
μετρήσεις=['ακρίβεια'])
model.fit (X_train, y_train, epochs=5)
Το μοντέλο θα διαρκέσει λίγα λεπτά για να εκπαιδευτεί. Αφού ολοκληρωθεί η εκπαίδευση του μοντέλου, αξιολογήστε την απόδοσή του στο δοκιμαστικό σετ.
model.evaluate (X_test, y_test)
Η συνάρτηση αξιολόγησης θα επιστρέψει την απώλεια και την ακρίβεια του μοντέλου. Το μοντέλο παράγει ακρίβεια 98%.
Χρησιμοποιώντας το μοντέλο για να ταξινομήσετε τα δικά σας χειρόγραφα ψηφία
Για να ταξινομήσετε τα δικά σας χειρόγραφα ψηφία, πρέπει να προετοιμάσετε τις εικόνες σας ώστε να ταιριάζουν με αυτές του συνόλου δεδομένων MNIST. Εάν δεν το κάνετε αυτό, το μοντέλο σας θα έχει κακή απόδοση.
Για προεπεξεργασία των εικόνων:
- Φορτώστε την εικόνα που περιέχει το ψηφίο χρησιμοποιώντας το OpenCV.
- Μετατρέψτε το σε κλίμακα του γκρι και αλλάξτε το μέγεθός του σε 28 επί 28 pixel.
- Αναστρέψτε και κανονικοποιήστε τις τιμές των pixel.
- Τέλος, ισοπεδώστε την εικόνα σε έναν πίνακα 1D.
Περάστε την προεπεξεργασμένη εικόνα στο μοντέλο για πρόβλεψη και εκτυπώστε την προβλεπόμενη τιμή στην οθόνη.
img = cv2.imread('digits/digit1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.atype('float32') / 255.0# Ισιώνετε την εικόνα σε πίνακα 1D
input_data = img_normalized.flatten().reshape( 1,28,28)
# Κάντε μια πρόβλεψη χρησιμοποιώντας το μοντέλο
prediction = model.predict (input_data)
Τυπώνω (f' Πρόβλεψη: {np.argmax (πρόβλεψη)}')
Διαβίβαση μιας προεπεξεργασμένης εικόνας που περιέχει έναν αριθμό στο μοντέλο.
Η έξοδος του μοντέλου είναι η εξής:
Το μοντέλο μπόρεσε να ταξινομήσει σωστά το ψηφίο επτά.
Νευρωνικά δίκτυα σε Chatbots
Η χρήση των νευρωνικών δικτύων έχει εκραγεί τα τελευταία χρόνια. Έχουν χρησιμοποιηθεί κυρίως στην επεξεργασία φυσικής γλώσσας για μετάφραση γλώσσας και γενετική τεχνητή νοημοσύνη.
Πιο πρόσφατα, έχει αυξηθεί ο αριθμός των chatbot που μπορούν να επικοινωνούν με τρόπο που μοιάζει με τον άνθρωπο. Χρησιμοποιούν έναν τύπο νευρωνικού δικτύου γνωστό ως νευρωνικό δίκτυο μετασχηματιστή. Αλληλεπιδράστε με μερικά από αυτά και ζήστε τη δύναμη των νευρωνικών δικτύων.