Η Τεχνητή Νοημοσύνη (AI) έχει κερδίσει σημαντική δημοτικότητα τα τελευταία χρόνια.
Εάν είστε μηχανικός λογισμικού, επιστήμονας υπολογιστών ή λάτρης της επιστήμης δεδομένων γενικά, τότε πιθανότατα σας ενδιαφέρουν οι εκπληκτικές εφαρμογές επεξεργασίας εικόνας, αναγνώρισης προτύπων και ανίχνευσης αντικειμένων που παρέχονται από αυτόν τον τομέα.
Το πιο σημαντικό υποπεδίο της τεχνητής νοημοσύνης για το οποίο πιθανώς έχετε ακούσει είναι το Deep Learning. Αυτό το πεδίο εστιάζει σε ισχυρούς αλγόριθμους (οδηγίες προγράμματος υπολογιστή) που έχουν διαμορφωθεί σύμφωνα με τη λειτουργικότητα του ανθρώπινου εγκεφάλου, γνωστοί ως Νευρωνικά δίκτυα.
Σε αυτό το άρθρο, θα εξετάσουμε την έννοια των νευρωνικών δικτύων και τον τρόπο κατασκευής, μεταγλώττισης, προσαρμογής και αξιολόγησης αυτών των μοντέλων χρησιμοποιώντας Python.
Νευρωνικά δίκτυα
Τα νευρωνικά δίκτυα, ή NN, είναι μια σειρά αλγορίθμων που διαμορφώνονται σύμφωνα με τη βιολογική δραστηριότητα του ανθρώπινου εγκεφάλου. Τα νευρωνικά δίκτυα αποτελούνται από κόμβους, που ονομάζονται επίσης νευρώνες.
Μια συλλογή κατακόρυφων κόμβων είναι γνωστά ως στρώματα. Το μοντέλο αποτελείται από μία είσοδο, μία έξοδο και έναν αριθμό κρυφών επιπέδων. Κάθε στρώμα αποτελείται από κόμβους, που ονομάζονται επίσης νευρώνες, όπου γίνονται οι υπολογισμοί.
Στο παρακάτω διάγραμμα, οι κύκλοι αντιπροσωπεύουν τους κόμβους και η κάθετη συλλογή κόμβων αντιπροσωπεύουν τα επίπεδα. Υπάρχουν τρία επίπεδα σε αυτό το μοντέλο.
Οι κόμβοι ενός στρώματος συνδέονται με το επόμενο στρώμα μέσω γραμμών μετάδοσης όπως φαίνεται παρακάτω.
Το σύνολο δεδομένων μας αποτελείται από δεδομένα με ετικέτα. Αυτό σημαίνει ότι σε κάθε οντότητα δεδομένων έχει εκχωρηθεί μια συγκεκριμένη τιμή ονόματος.
Έτσι, για ένα σύνολο δεδομένων ταξινόμησης ζώων θα έχουμε ως δεδομένα μας εικόνες από γάτες και σκύλους, με τις ετικέτες μας «γάτα» και «σκύλος».
Είναι σημαντικό να σημειωθεί ότι οι ετικέτες πρέπει να μετατραπούν σε αριθμητικές τιμές για να κατανοήσει το μοντέλο μας, έτσι οι ετικέτες των ζώων μας γίνονται «0» για τη γάτα και «1» για τον σκύλο. Τόσο τα δεδομένα όσο και οι ετικέτες περνούν μέσα από το μοντέλο.
Μάθηση
Τα δεδομένα τροφοδοτούνται στο μοντέλο μία οντότητα τη φορά. Αυτά τα δεδομένα αναλύονται σε κομμάτια και περνούν από κάθε κόμβο του μοντέλου. Οι κόμβοι εκτελούν μαθηματικές πράξεις σε αυτά τα κομμάτια.
Δεν χρειάζεται να γνωρίζετε τις μαθηματικές συναρτήσεις ή τους υπολογισμούς για αυτό το σεμινάριο, αλλά είναι σημαντικό να έχετε μια γενική ιδέα για το πώς λειτουργούν αυτά τα μοντέλα. Μετά από μια σειρά υπολογισμών σε ένα επίπεδο, τα δεδομένα διαβιβάζονται στο επόμενο επίπεδο και ούτω καθεξής.
Μόλις ολοκληρωθεί, το μοντέλο μας προβλέπει την ετικέτα δεδομένων στο επίπεδο εξόδου (για παράδειγμα, σε ένα πρόβλημα ταξινόμησης ζώων έχουμε μια πρόβλεψη «0» για μια γάτα).
Στη συνέχεια, το μοντέλο συγκρίνει αυτήν την προβλεπόμενη τιμή με αυτήν της πραγματικής τιμής ετικέτας.
Εάν οι τιμές ταιριάζουν, το μοντέλο μας θα λάβει την επόμενη είσοδο, αλλά αν οι τιμές διαφέρουν, το μοντέλο θα υπολογίσει τη διαφορά μεταξύ των δύο τιμών, που ονομάζεται απώλεια, και θα προσαρμόσει τους υπολογισμούς του κόμβου για να παράγει αντίστοιχες ετικέτες την επόμενη φορά.
Πλαίσια βαθιάς μάθησης
Για να δημιουργήσουμε νευρωνικά δίκτυα σε κώδικα, πρέπει να κάνουμε εισαγωγή Πλαίσια Deep Learning γνωστές ως βιβλιοθήκες που χρησιμοποιούν το ολοκληρωμένο περιβάλλον ανάπτυξης (IDE).
Αυτά τα πλαίσια είναι μια συλλογή από προ-γραμμένες συναρτήσεις που θα μας βοηθήσουν σε αυτό το σεμινάριο. Θα χρησιμοποιήσουμε το πλαίσιο Keras για να δημιουργήσουμε το μοντέλο μας.
Το Keras είναι μια βιβλιοθήκη Python που χρησιμοποιεί ένα backend βαθιάς μάθησης και τεχνητής νοημοσύνης που ονομάζεται Τάση ροής για τη δημιουργία NN με τη μορφή απλών διαδοχικών μοντέλων με ευκολία.
Η Keras έρχεται επίσης με τα δικά της προϋπάρχοντα μοντέλα που θα μπορούσαν επίσης να χρησιμοποιηθούν. Για αυτό το σεμινάριο, θα δημιουργήσουμε το δικό μας μοντέλο χρησιμοποιώντας το Keras.
Μπορείτε να μάθετε περισσότερα για αυτό το πλαίσιο Deep Learning από το Ιστοσελίδα Keras.
Κατασκευή νευρωνικού δικτύου (Εκμάθηση)
Ας προχωρήσουμε στην κατασκευή ενός νευρωνικού δικτύου χρησιμοποιώντας Python.
Δήλωση προβλήματος
Τα νευρωνικά δίκτυα είναι ένας τύπος λύσης σε προβλήματα που βασίζονται σε τεχνητή νοημοσύνη. Για αυτό το σεμινάριο θα εξετάσουμε τα δεδομένα διαβήτη Pima Indians, τα οποία είναι διαθέσιμα εδώ.
UCI Η Machine Learning έχει συγκεντρώσει αυτό το σύνολο δεδομένων και περιέχει ιατρικό αρχείο Ινδών ασθενών. Το μοντέλο μας πρέπει να προβλέψει εάν ο ασθενής θα εμφανίσει διαβήτη εντός 5 ετών ή όχι.
Φόρτωση σετ δεδομένων
Το σύνολο δεδομένων μας είναι ένα ενιαίο αρχείο CSV που ονομάζεται "diabetes.csv" που μπορεί εύκολα να χειριστεί χρησιμοποιώντας το Microsoft Excel.
Πριν δημιουργήσουμε το μοντέλο μας, πρέπει να εισαγάγουμε το σύνολο δεδομένων μας. Χρησιμοποιώντας τον παρακάτω κώδικα μπορείτε να το κάνετε αυτό:
εισαγάγετε panda ως pd
data = pd.read_csv('diabetes.csv')
x = data.drop ("Αποτέλεσμα")
y = δεδομένα ["Αποτέλεσμα"]
Εδώ χρησιμοποιούμε το Πάντα βιβλιοθήκη για να μπορούμε να χειριζόμαστε τα δεδομένα του αρχείου CSV, η read_csv() είναι μια ενσωματωμένη συνάρτηση των Pandas που μας επιτρέπει να αποθηκεύουμε τις τιμές στο αρχείο μας σε μια μεταβλητή που ονομάζεται 'data'.
Η μεταβλητή x περιέχει το σύνολο δεδομένων μας χωρίς τα δεδομένα αποτελέσματος (ετικέτες). Αυτό το επιτυγχάνουμε με τη συνάρτηση data.drop() που αφαιρεί τις ετικέτες για το x, ενώ το y περιέχει μόνο τα δεδομένα αποτελέσματος (ετικέτα).
Δόμηση διαδοχικού μοντέλου
Βήμα 1: Εισαγωγή Βιβλιοθηκών
Πρώτον, πρέπει να εισαγάγουμε το TensorFlow και το Keras, μαζί με ορισμένες παραμέτρους που απαιτούνται για το μοντέλο μας. Ο παρακάτω κώδικας μας επιτρέπει να το κάνουμε αυτό:
εισαγωγή tensorflow ως tf
από κεραίες εισαγωγής tensorflow
από tensorflow.keras.μοντέλα εισαγωγή Διαδοχική
από το tensorflow.keras.layers εισαγωγή Ενεργοποίηση, πυκνό
από το tensorflow.keras.optimizers import Adam
από το tensorflow.keras.metrics εισαγωγή categorical_crossentropy
Για το μοντέλο μας εισάγουμε πυκνά στρώματα. Αυτά είναι πλήρως συνδεδεμένα στρώματα. Δηλαδή, κάθε κόμβος σε ένα επίπεδο συνδέεται πλήρως με έναν άλλο κόμβο στο επόμενο επίπεδο.
Εισάγουμε επίσης ένα δραστηριοποίηση λειτουργία που απαιτείται για την κλιμάκωση των δεδομένων που αποστέλλονται σε κόμβους. Βελτιστοποιητές έχουν επίσης εισαχθεί για την ελαχιστοποίηση των απωλειών.
Ο Adam είναι ένας διάσημος βελτιστοποιητής που κάνει τους υπολογισμούς του κόμβου ενημέρωσης του μοντέλου μας πιο αποτελεσματικά, μαζί με categorical_crossentropy που είναι τον τύπο της συνάρτησης απώλειας (υπολογίζει τη διαφορά μεταξύ των πραγματικών και των προβλεπόμενων τιμών ετικέτας) που θα χρησιμοποιήσουμε.
Βήμα 2: Σχεδιάζοντας το μοντέλο μας
Το μοντέλο που δημιουργώ έχει μια στρώση εισόδου (με 16 μονάδες), μια κρυφή (με 32 μονάδες) και μια εξόδου (με 2 μονάδες). Αυτοί οι αριθμοί δεν είναι σταθεροί και θα εξαρτηθούν εξ ολοκλήρου από το δεδομένο πρόβλημα.
Ο καθορισμός του σωστού αριθμού μονάδων και επιπέδων είναι μια διαδικασία που μπορεί να βελτιωθεί υπερωρίες μέσω της εξάσκησης. Η ενεργοποίηση αντιστοιχεί στον τύπο της κλιμάκωσης που θα πραγματοποιήσουμε στα δεδομένα μας πριν τα περάσουμε από έναν κόμβο.
Οι Relu και Softmax είναι γνωστές λειτουργίες ενεργοποίησης για αυτήν την εργασία.
μοντέλο = Διαδοχική([
Πυκνό(μονάδες = 16, σχήμα_εισόδου = (1,), ενεργοποίηση = 'relu'),
Πυκνό (μονάδες = 32, ενεργοποίηση = 'relu'),
Πυκνό (μονάδες = 2, ενεργοποίηση = 'softmax')
])
Δείτε πώς πρέπει να μοιάζει η περίληψη του μοντέλου:
Εκπαίδευση του Μοντέλου
Το μοντέλο μας θα εκπαιδευτεί σε δύο βήματα, το πρώτο είναι η μεταγλώττιση του μοντέλου (συναρμολόγηση του μοντέλου) και το επόμενο η προσαρμογή του μοντέλου σε ένα δεδομένο σύνολο δεδομένων.
Αυτό μπορεί να γίνει χρησιμοποιώντας τη συνάρτηση model.compile() ακολουθούμενη από τη συνάρτηση model.fit().
model.compile(optimizer = Adam(learning_rate = 0.0001), loss = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(x, y, εποχές = 30, batch_size = 10)
Ο καθορισμός της μέτρησης «ακρίβεια» μας επιτρέπει να παρατηρούμε την ακρίβεια του μοντέλου μας κατά τη διάρκεια της εκπαίδευσης.
Δεδομένου ότι οι ετικέτες μας έχουν τη μορφή 1 και 0, θα χρησιμοποιήσουμε μια δυαδική συνάρτηση απώλειας για να υπολογίσουμε τη διαφορά μεταξύ των πραγματικών και των προβλεπόμενων ετικετών.
Το σύνολο δεδομένων χωρίζεται επίσης σε παρτίδες των 10 (batch_size) και θα περάσει από το μοντέλο 30 φορές (εποχές). Για ένα δεδομένο σύνολο δεδομένων, x θα ήταν τα δεδομένα και y θα ήταν οι ετικέτες που αντιστοιχούν στα δεδομένα.
Δοκιμαστικό μοντέλο με χρήση προβλέψεων
Για να αξιολογήσουμε το μοντέλο μας, κάνουμε προβλέψεις για τα δεδομένα δοκιμής χρησιμοποιώντας τη συνάρτηση predict().
προβλέψεις = model.predict(x)
Και αυτό είναι!
Θα πρέπει τώρα να έχετε μια καλή κατανόηση του Βαθιά μάθηση εφαρμογή, Νευρωνικά Δίκτυα, πώς λειτουργούν γενικά και πώς να δημιουργήσετε, να εκπαιδεύσετε και να δοκιμάσετε ένα μοντέλο σε κώδικα Python.
Ελπίζω αυτό το σεμινάριο να σας δώσει την αρχή για να δημιουργήσετε και να αναπτύξετε τα δικά σας μοντέλα Deep Learning.
Ενημερώστε μας στα σχόλια εάν το άρθρο ήταν χρήσιμο.
Αφήστε μια απάντηση