Πώς να οπτικοποιήσετε τις αρχιτεκτονικές νευρωνικών δικτύων στην Python

Ένας γρήγορος οδηγός για τη δημιουργία διαγραμματικής αναπαράστασης των νευρωνικών δικτύων σας χρησιμοποιώντας το Jupyter ή το Google Colab

Image Credit — Αναπτύχθηκε από τον συγγραφέα χρησιμοποιώντας visualkeras και Jupyter Notebook.

Συχνά ενώ εργαζόμαστε με τεχνητά νευρωνικά δίκτυα ή άλλες παραλλαγές όπως τα νευρωνικά δίκτυα συνέλιξης ή τα επαναλαμβανόμενα νευρωνικά δίκτυα, θέλουμε να οπτικοποιήσουμε και να δημιουργήσουμε μια διαγραμματική αναπαράσταση του μεταγλωττισμένου μοντέλου μας. Αυτό μπορεί να λύσει δύο σκοπούς:

  1. Ενώ ο καθορισμός και η εκπαίδευση πολλαπλών μοντέλων μάς επιτρέπει να οπτικοποιήσουμε το βάθος του μοντέλου μας και να συγκρίνουμε διαφορετικά επίπεδα και τον τρόπο διαδοχικής τοποθέτησης τους.
  2. Επιτρέπει την καλύτερη κατανόηση της δομής του μοντέλου, των συναρτήσεων ενεργοποίησης που χρησιμοποιούνται σε κάθε επίπεδο, του σχήματος κάθε στρώματος (αριθμός νευρώνων) και των παραμέτρων που πρέπει να εκπαιδευτούν

Υπάρχουν μερικά πακέτα άμεσα διαθέσιμα σε python που μπορούν να δημιουργήσουν μια οπτική αναπαράσταση των μοντέλων νευρωνικών δικτύων μας. Τα τρία πρώτα πακέτα μπορούν να χρησιμοποιηθούν ακόμη και πριν από την εκπαίδευση ενός μοντέλου (το μοντέλο πρέπει μόνο να καθοριστεί και να μεταγλωττιστεί). Ωστόσο, τα Tensor Boards απαιτούν από τον χρήστη να εκπαιδεύσει το μοντέλο σε ακριβή δεδομένα πριν να οπτικοποιηθεί η αρχιτεκτονική.

  1. ANN Visualizer
  2. Visual Keras
  3. Οικόπεδο Μοντέλο Κέρας
  4. Tansor Board
pip install visualkeraspip install ann_visualizerpip εγκατάσταση graphviz

Δεν χρειάζεται να εγκαταστήσουμε το "Tensor Board" και το "Keras Model Plot" ξεχωριστά. Αυτό θα γίνει με την αρχική εγκατάσταση των Tensorflow & Keras.

Ενδέχεται να χρησιμοποιήσουμε μόνο μερικές από τις βιβλιοθήκες που αναφέρονται παρακάτω. Οι περισσότερες βιβλιοθήκες μπορούν να μετατρέψουν ένα μοντέλο TensorFlow σε διάγραμμα χωρίς να το εκπαιδεύσουν ρητά σε δεδομένα. Μπορείτε να το θεωρήσετε αυτό ως μια μοναδική πηγή αλήθειας. Ορισμένες βιβλιοθήκες, όπως οι Pandas, Skimage και OpenCV, θα σας φανούν χρήσιμες κατά την ανάγνωση δομημένων δεδομένων ή εικόνων.

# Εισαγάγετε τις απαραίτητες βιβλιοθήκεςεισαγάγετε panda ως pdεισαγωγή numpy ως np # Εισαγωγή numpyαπό δεδομένα εισαγωγής skimage, io # Εισαγωγή βιβλιοθήκης skimage (δεδομένα - Δοκιμή εικόνων και παραδειγμάτων δεδομένων.# io - Ανάγνωση, αποθήκευση και εμφάνιση εικόνων.)από το skimage.color εισαγωγή rgb2grayεισαγωγή matplotlib.pyplot ως plt # Εισαγωγή matplotlib.pyplot (Πλαίσιο σχεδίασης σε Python.)% matplotlib inlineimport os # Αυτή η ενότητα παρέχει έναν φορητό τρόπο χρήσης λειτουργιών που εξαρτώνται από το λειτουργικό σύστημα.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'προειδοποιήσεις εισαγωγής# Καταργήστε τις προειδοποιήσειςwarnings.filterwarnings('ignore')από την οθόνη εισαγωγής IPython.displayεισαγωγή cv2 ως cv
από το sklearn.metrics εισαγωγή confusion_matrix
από sklearn.model_selection import train_test_splitαπό tensorflow.keras import utilsαπό το tensorflow.keras.models εισαγωγή Sequential,load_modelαπό το tensorflow.keras.layers εισαγωγή Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationαπό το tensorflow.keras.optimizers import Adamεισαγωγή tensorflow ως tfεισαγάγετε θαλασσοπόρο ως sns

Μερικοί χρήσιμοι σύνδεσμοι για να εξερευνήσετε περισσότερο περιεχόμενο γύρω από τα ANN και τα CNN από την αρχή.

Θα ορίσουμε τρία διαφορετικά μοντέλα CNN με διαφορετικές υπερπαραμέτρους. Στην ιδανική περίπτωση, στον πραγματικό κόσμο, στοχεύουμε στην εφαρμογή διαφορετικών αρχιτεκτονικών για τη μεγιστοποίηση της ακρίβειας ή οποιωνδήποτε σχετικών μετρήσεων, δεδομένου ότι χτίζουμε το μοντέλο για μια εργασία ταξινόμησης πολλών κατηγοριών. Η επιλογή του τύπου προβλήματος δεν θα έχει καμία επίδραση στον τρόπο χρήσης των πακέτων οπτικοποίησης.

Δημιουργήσαμε συναρτήσεις που καθορίζονται από τον χρήστη για να δημιουργήσουμε τρία διαφορετικά μοντέλα χωριστά με διαφορετικό αριθμό επιπέδων CNN, max-pooling και πυκνά επίπεδα.

4.1 – Αρχιτεκτονική 1 — Ρηχά στρώματα CNN + στρώματα ANN

def construct_model():μοντέλο = Διαδοχική()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activation='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))model.add(MaxPool2D((2, 2)))model.add (Flatten ())model.add(Dense(256, activation='relu'))model.add(Dense(12, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])μοντέλο επιστροφής

4.2 — Αρχιτεκτονική 2 — Βαθιά CNN + Ρηχά επίπεδα ANN

def sconstruct_model():smodel = Sequential()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Flatten())smodel.add(Dense(256, activation='relu'))smodel.add(Dense(12, activation='softmax'))#optimizer = Adam(lr=0.001)smodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])#model.summary()μοντέλο επιστροφής

4.3 — Αρχιτεκτονική 3 — Βαθιά επίπεδα CNN & ANN

def cconstruct_model(learningRate):smodel = Sequential()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activation='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Flatten())smodel.add(Dense(256, activation='relu'))smodel.add(Dense(256, activation='relu'))smodel.add(Dense(12, activation='softmax'))optimizer = Adam(lr=learningRate)smodel.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])smodel.summary()μοντέλο επιστροφήςmodel=cconstruct_model(0.001)

Μια μονάδα Python που ονομάζεται ANN Visualizer καθιστά δυνατή την οπτικοποίηση ενός τεχνητού νευρωνικού δικτύου με λίγες γραμμές κώδικα (Gheorghiu, 2022). Χρησιμοποιεί τη μονάδα Graphviz της Keras και της Python για να δημιουργήσει ένα τακτοποιημένο και ελκυστικό γράφημα νευρωνικών δικτύων. Έχετε την ευελιξία να οπτικοποιήσετε ολόκληρο το δίκτυο Deep Learning ή απλώς το Συνελικτικό Νευρωνικό Δίκτυο που έχετε δημιουργήσει με γνώμονα την πρόοδο στη βαθιά μάθηση (Shah, 2018).

Χρησιμοποιήστε την παρακάτω δομή για να δημιουργήσετε μια αναπαράσταση pdf του νευρωνικού σας δικτύου. Ωστόσο, πριν από αυτό, πρέπει να συντάξουμε τα παραπάνω μοντέλα.

model=construct_model()

ann_viz(model, view=True, filename=”network.gv”, title=”MyNeural Network”)

  • μοντέλο - Sequential Model από την Keras
  • προβολή — Οπτικοποιήστε το γράφημα μετά την κλήση της ann_viz().
  • όνομα αρχείου - Όνομα αρχείου
  • τίτλος - Οποιοσδήποτε συγκεκριμένος τίτλος που υποδηλώνει το γράφημα
από ann_visualizer.visualize εισαγωγή ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — Model 1 — Simple Architecture”)
Εικόνα 1: Στιγμιότυπο του construct_model() που δημιουργήθηκε με χρήση του ANN Visualizer. Πίστωση — Εικόνα που αναπτύχθηκε από τον συγγραφέα χρησιμοποιώντας το σημειωματάριο Jupyter. η αρχική έξοδος είναι πολύ μεγάλη για να χωρέσει εδώ ως εικόνα, επομένως χρησιμοποιείται εδώ μια στιγμιαία λήψη των κάτω στρωμάτων.

Ένα εργαλείο Python που ονομάζεται Visualkeras διευκολύνει την προβολή σχεδίων νευρωνικών δικτύων Keras (είτε χωριστά είτε ως μέρος του TensorFlow). Οι περισσότερες ανάγκες styling μπορούν να καλυφθούν με ευκολία. Τα συνελικτικά νευρωνικά δίκτυα (CNN) επωφελούνται σημαντικά από την ανάπτυξη αρχιτεκτονικών στιλ στιλ. Τα περισσότερα μοντέλα, συμπεριλαμβανομένων των απλών δικτύων προώθησης τροφοδοσίας, επωφελούνται σε μεγάλο βαθμό από τη δημιουργία αρχιτεκτονικής τύπου γραφήματος, την οποία υποστηρίζει αυτή η ενότητα (Gavrikov, 2022).

model1=construct_model()model2=sconstruct_model()model3=cconstruct_model(0.009)εισαγωγή visualkerasαπό την εισαγωγή PIL ImageFontvisualkeras.layered_view(model1, legend=True)visualkeras.layered_view(model2, legend=True)visualkeras.layered_view(model3, legend=True)
Εικόνα 2. Παρουσιάζει μια διαγραμματική αναπαράσταση τριών διαφορετικών αρχιτεκτονικών μοντέλων. Πίστωση — Εικόνα που αναπτύχθηκε από τον συγγραφέα χρησιμοποιώντας το Jupyter Notebook.

Η keras.utils.plot_model παρέχει ενσωματωμένες συναρτήσεις για τη σχεδίαση ενός μοντέλου που ορίζεται και μεταγλωττίζεται μέσω του Keras χρησιμοποιώντας πακέτα Graphviz και pydot. Γραφικά είναι λιγότερο διαισθητικό από τα πακέτα που χρησιμοποιούνται παραπάνω, αλλά περιγράφει τη βασική αρχιτεκτονική ενός διαδοχικού μοντέλου (Team, nd).

tf.keras.utils.plot_model(μοντέλο 1,to_file="model.png",show_shapes=Αλήθεια,show_dtype=Λάθος,show_layer_names=Αλήθεια,rankdir="TB",expand_nested=Αλήθεια,dpi=96,layer_range=Κανένα,show_layer_activations=Αλήθεια,)

Λίγες υπερπαράμετροι που πρέπει να λάβετε υπόψη:

  1. μοντέλο: Ένα παράδειγμα μεταγλωττισμένου μοντέλου Keras ή αντικειμένου μοντέλου
  2. να αρχειοθετήσω: Όνομα αρχείου της εικόνας
  3. show_shapes: εμφάνιση της διάστασης και του σχήματος κάθε στρώματος στο νευρωνικό δίκτυο
  4. show_layer_activation: Εμφάνιση συναρτήσεων ενεργοποίησης που χρησιμοποιούνται στους Νευρώνες
Εικόνα 3. Παρουσιάζει την έξοδο της tf.keras.utils.plot_model(). Πίστωση — Εικόνα που αναπτύχθηκε από τον συγγραφέα χρησιμοποιώντας το σημειωματάριο Jupyter.

Το TensorBoard είναι μια διεπαφή πίνακα εργαλείων που επιτρέπει στους χρήστες να οπτικοποιούν αρχεία καταγραφής σε διαφορετικές εκδόσεις μοντέλων. Τα αρχεία καταγραφής μπορούν να κυμαίνονται από την παρακολούθηση οποιουδήποτε μέτρου επικύρωσης μοντέλου όπως ακρίβεια, ανάκληση, RMSE, MAPE και MSE σε διαφορετικές εποχές έως τη δημιουργία ενός εννοιολογικού γραφήματος της αρχιτεκτονικής του μοντέλου. Είναι ένα ισχυρό εργαλείο για να οπτικοποιήσετε εάν το επιδιωκόμενο μοντέλο ταιριάζει με την αναμενόμενη σχεδίαση, ενώ οδηγείτε σε πληροφορίες σχετικά με τον τρόπο αλλαγής ενός μοντέλου χρησιμοποιώντας ένα γράφημα op-level.

Για να χρησιμοποιήσουμε αυτή τη λειτουργία, πρέπει πρώτα να φορτώσουμε το TensorBoard και μετά να δημιουργήσουμε έναν κατάλογο καταγραφής.

%load_ext tensorboardαπό ώρα εισαγωγής ημερομηνίας ώραςαπό κεραίες εισαγωγής tensorflow# Καθορίστε την επανάκληση Keras TensorBoard.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Δημιουργήστε την επανάκληση Keras TensorBoard και καθορίστε τον κατάλογο καταγραφής πριν από την εκπαίδευση. Μπορείτε να διασφαλίσετε ότι τα δεδομένα γραφήματος καταγράφονται για οπτικοποίηση TensorBoard παρέχοντας αυτήν την επιστροφή κλήσης στη model.fit(). Μόλις καλέσετε το TensorBoard, μπορεί να χρειαστούν μερικά λεπτά για να φορτώσει.

model.fit(X2_train, Y2_train,batch_size=64,εποχές=5,callbacks=[tensorboard_callback])

Σημείωση: Τα X2_train και Y2_train είναι σύνολα δεδομένων εκπαίδευσης που δεν αντικατοπτρίζονται στους παραπάνω κωδικούς. Μπορείτε να το αντικαταστήσετε με οποιαδήποτε δικά σας δεδομένα εκπαίδευσης.

Το TensorBoard εμφανίζει πάντα το γράφημα op-level από προεπιλογή. (Η ετικέτα "Προεπιλογή" επισημαίνεται στα αριστερά.) Το γράφημα είναι ανάποδα σε σύγκριση με τον κώδικα, επειδή τα δεδομένα ρέουν από κάτω προς τα πάνω. Αλλά όπως μπορείτε να δείτε, το γράφημα μοιάζει κατά προσέγγιση με την περιγραφή του μοντέλου Keras, με πρόσθετες ακμές που οδηγούν σε άλλους κόμβους υπολογισμού (Tensorflow, 2022).

Εικόνα 4. Παρουσιάζει την έξοδο του TensorBoard. Πίστωση — Εικόνα που αναπτύχθηκε από τον συγγραφέα χρησιμοποιώντας το Jupyter Notebook.

Περισσότερες πληροφορίες σχετικά με τον τρόπο χρήσης του TensorBoard μπορείτε να βρείτε στην ενότητα Αναφορά.

Από εμπορική άποψη, όπου ένας χρήστης πρέπει να παρουσιάσει την ανάλυσή του σε μια ομάδα ενδιαφερομένων, αυτά τα διαγράμματα προσθέτουν περισσότερη πολυπλοκότητα στη συζήτηση. Μπορεί να μην αποτελούν εξαιρετική προστιθέμενη αξία. Ωστόσο, από ακαδημαϊκή και μαθησιακή προοπτική, υπάρχει αξία στη χρήση αυτών των πακέτων για την εμφάνιση αυτών των αρχιτεκτονικών βαθιάς μάθησης. Ο οπτικοποιητής ANN, για μένα, ξεχωρίζει από τα υπόλοιπα, καθώς είναι εύκολο να αφομοιωθεί το διάγραμμα, ενώ η έξοδος γραφήματος του TensorBoard απαιτεί περισσότερες τεχνικές λεπτομέρειες για να καταναλωθούν τα αποτελέσματα.

Gavrikov, P. (2022, 13 Απριλίου). visualkeras για Keras / TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 Οκτωβρίου). ANN Visualizer. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018, 28 Απριλίου). Οπτικοποίηση τεχνητών νευρωνικών δικτύων (ANN) με μία μόνο γραμμή κώδικα. Μεσαίο. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Υπερχείλιση στοίβας. (ν). μηχανική εκμάθηση — Πώς απεικονίζετε τις αρχιτεκτονικές νευρωνικών δικτύων; Data Science Stack Exchange. Ανακτήθηκε στις 29 Οκτωβρίου 2022, από https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Ομάδα, Κ. (η). Τεκμηρίωση Keras: Βοηθητικά προγράμματα σχεδίασης μοντέλων. Keras.io. Ανακτήθηκε στις 29 Οκτωβρίου 2022, από https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflow. (2022, 6 Ιανουαρίου). Εξέταση του γραφήματος TensorFlow | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Πώς να οπτικοποιήσετε αρχιτεκτονικές νευρωνικών δικτύων στην Python που αναδημοσιεύτηκε από την πηγή https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 todatascience.com/feed

Si al principi no tens èxit, aleshores el paracaigudisme no és per a tu.

->

Σφραγίδα ώρας:

Περισσότερα από Σύμβουλοι Blockchain