כיצד לדמיין ארכיטקטורות רשתות עצביות ב-Python

מדריך מהיר ליצירת ייצוג דיאגרמטי של הרשתות העצביות שלך באמצעות Jupyter או Google Colab

קרדיט תמונה - פותח על ידי המחבר באמצעות visualkeras ומחברת Jupyter.

לעתים קרובות, תוך כדי עבודה עם רשתות עצביות מלאכותיות או וריאציות אחרות כמו Convolution Neural Networks או Recurrent Neural Networks, אנו רוצים לדמיין וליצור ייצוג דיאגרמטי של המודל המלודר שלנו. זה יכול לפתור שתי מטרות:

  1. תוך הגדרה והכשרה של מספר מודלים מאפשר לנו לדמיין את עומק המודל שלנו ולהשוות רבדים שונים וכיצד הם מונחים ברצף.
  2. מאפשר הבנה טובה יותר של מבנה המודל, פונקציות ההפעלה המשמשות בכל שכבה, צורה של כל שכבה (מספר נוירונים), ופרמטרים שיש לאמן

ישנן כמה חבילות זמינות ב-python שיכולות ליצור ייצוג חזותי של מודלים של רשתות עצביות שלנו. ניתן להשתמש בשלוש החבילות הראשונות עוד לפני הדרכה של מודל (יש להגדיר ולהרכיב את המודל בלבד); עם זאת, Tensor Boards דורש מהמשתמש לאמן את המודל על נתונים מדויקים לפני שניתן להמחיש את הארכיטקטורה.

  1. ANN Visualizer
  2. Visual Keras
  3. עלילת דגם קרס
  4. לוח טנסור
pip להתקין visualkerasהתקנת pip ann_visualizerpip התקנת graphviz

אנחנו לא צריכים להתקין את "לוח הטנזור" ואת "עלילת דגם Keras" בנפרד. זה יגיע עם ההתקנה הראשונית של Tensorflow & Keras.

אנו עשויים להשתמש רק בכמה מהספריות המפורטות להלן. רוב הספריות יכולות להמיר מודל TensorFlow לתרשים מבלי לאמן אותו במפורש על נתונים. אתה יכול להתייחס לזה כמקור יחיד של אמת. ספריות מסוימות, כמו Pandas, Skimage ו-OpenCV, יהיו שימושיות בעת קריאת נתונים או תמונות מובנים.

# ייבא ספריות נחוצותיבוא פנדות כ- pdייבוא ​​numpy כ-np # ייבוא ​​numpyמנתוני ייבוא ​​skimage, io # ייבוא ​​ספריית skiimage (נתונים - בדיקת תמונות ונתונים לדוגמה.# io - קריאה, שמירה והצגת תמונות.)מ-skimage.color ייבוא ​​rgb2grayייבוא ​​matplotlib.pyplot כ-plt # ייבוא ​​matplotlib.pyplot (מסגרת התווים ב-Python.)% matplotlib מוטבעimport os # מודול זה מספק דרך ניידת להשתמש בפונקציונליות התלויה במערכת ההפעלה.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'אזהרות ייבוא# הדחיק אזהרותwarnings.filterwarnings('ignore')מתצוגת ייבוא ​​IPython.displayיבא cv2 כ-cv
מאת sklearn.metrics ייבוא ​​confusion_matrix
מ- sklearn.model_selection יבוא train_test_splitמאת tensorflow.keras ייבוא ​​utilsמ tensorflow.keras.models ייבוא ​​Sequential,load_modelמאת tensorflow.keras.layers ייבוא ​​Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationמאת tensorflow.keras.optimizers ייבוא ​​אדםיבוא טנסור זורם כ- tfיבוא יליד ים כמו sns

כמה קישורים מועילים לחקר תוכן נוסף סביב ANN ו-CNN מאפס.

נגדיר שלושה מודלים שונים של CNN עם היפרפרמטרים שונים. באופן אידיאלי, בעולם האמיתי, אנו שואפים ליישם ארכיטקטורות שונות כדי למקסם את הדיוק או כל מדדים רלוונטיים, בהתחשב בכך שאנו בונים את המודל למשימת סיווג רב-קטגורית. לבחירה שלנו בסוג הבעיה לא תהיה כל השפעה על אופן השימוש בחבילות ההדמיה.

יצרנו פונקציות המוגדרות על ידי משתמש כדי לבנות שלושה מודלים שונים בנפרד עם מספר שונה של שכבות CNN, מאגר מקסימלי ושכבות צפופות.

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 - Deep CNN + Shallow ANN Layers

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()החזר smodel

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'))אופטימיזציה = Adam(lr=learningRate)smodel.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])smodel.summary()החזר smodelmodel=cconstruct_model(0.001)

מודול Python בשם ANN Visualizer מאפשר לדמיין רשת עצבית מלאכותית עם כמה שורות קוד (Gheorghiu, 2022). הוא משתמש במודול Graphviz של Keras ו- Python כדי לייצר גרף רשת עצבית מסודר ומושך. יש לך את הגמישות לדמיין את כל רשת הלמידה העמוקה או רק את הרשת העצבית המהפכנית שיצרת מונעת על ידי התקדמות בלמידה עמוקה (Shah, 2018).

השתמש במבנה הבא להלן כדי ליצור ייצוג pdf של הרשת העצבית שלך. עם זאת, לפני כן, עלינו להרכיב את המודלים לעיל.

model=construct_model()

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

  • דגם - דגם רציף מבית 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 Notebook. הפלט המקורי גדול מכדי להתאים כאן כתמונה, ולכן נעשה שימוש כאן בצילום מצב של השכבות התחתונות.

כלי Python הנקרא Visualkeras מקל על הצגת עיצובי הרשת העצבית של Keras (או בנפרד או כחלק מ-TensorFlow). ניתן לענות על רוב צרכי הסטיילינג בקלות. רשתות עצביות קונבולוציוניות (CNNs) מרוויחות באופן משמעותי מפיתוח ארכיטקטורות בסגנון שכבות. רוב הדגמים, כולל רשתות הזנה-פורוורד פשוטות, מרוויחים רבות מהדור של ארכיטקטורה בסגנון גרף, שבה תומך מודול זה (Gavrikov, 2022).

model1=construct_model()model2=sconstruct_model()model3=cconstruct_model(0.009)ייבוא ​​חזותייםמ-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=False,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 Notebook.

TensorBoard הוא ממשק לוח מחוונים המאפשר למשתמשים לדמיין יומנים על פני ריצות דגמים שונות. יומנים יכולים לנוע בין מעקב אחר כל מדד אימות מודל כמו דיוק, ריקול, RMSE, MAPE ו-MSE לאורך תקופות שונות ועד ליצירת גרף רעיוני של ארכיטקטורת המודל. זהו כלי רב עוצמה להמחיש אם הדגם המיועד תואם את העיצוב הצפוי תוך מתן תובנות כיצד ניתן לשנות מודל באמצעות גרף ברמת הפעלה.

כדי להשתמש בפונקציונליות זו עלינו לטעון תחילה את 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_רכבת, Y2_רכבת,batch_size=64,עידנים=5,callbacks=[tensorboard_callback])

הערה: X2_train ו-Y2_train הם מערכי נתונים לאימון שאינם משתקפים בקודים שלמעלה. אתה יכול להחליף את זה בכל נתוני אימון משלך.

TensorBoard תמיד מציג את הגרף ברמת הפעילות כברירת מחדל. (תג "ברירת מחדל" מודגש בצד שמאל.) הגרף הפוך בהשוואה לקוד מכיוון שהנתונים זורמים מלמטה למעלה. אבל כפי שאתה יכול לראות, הגרף דומה בערך לתיאור של מודל Keras, עם קצוות נוספים המובילים לצמתי חישוב אחרים (Tensorflow, 2022).

איור 4. ממחיש את הפלט של TensorBoard. קרדיט - תמונה שפותחה על ידי המחבר באמצעות Jupyter Notebook.

הקשר נוסף על אופן השימוש ב- TensorBoard ניתן למצוא תחת הפניה.

מנקודת מבט מסחרית, שבה משתמש צריך להציג את הניתוח שלו לקבוצה של בעלי עניין, דיאגרמות אלו מוסיפות יותר מורכבות לדיון. אולי הם לא מהווים ערך מוסף קיצוני. עם זאת, מנקודת מבט אקדמית ולומדת, יש יתרון בשימוש בחבילות אלה כדי להציג את ארכיטקטורות הלמידה העמוקה הללו. Visualizer של ANN, בעיני, בולט על פני השאר מכיוון שקל לעכל את הדיאגרמה, בעוד שפלט הגרף של TensorBoard דורש יותר פרטים טכניים לפני שניתן לצרוך את התוצאות.

גבריקוב, פ' (2022, 13 באפריל). visualkeras עבור Keras / TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 באוקטובר). ANN Visualizer. GitHub. https://github.com/RedaOps/ann-visualizer

שאה, א' (2018, 28 באפריל). הדמיית רשתות עצביות מלאכותיות (ANNs) עם שורת קוד אחת בלבד. בינוני. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

הצפת מחסנית. (נד). למידת מכונה - איך אתה מדמיין ארכיטקטורות של רשתות עצביות? חילופי מחסנית נתונים. אוחזר ב-29 באוקטובר 2022 מ https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

צוות, ק (נד). תיעוד קרס: כלי עזר לשרטוט מודלים. 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 דרך https:// richtingdatascience.com/feed

<!–

->

בול זמן:

עוד מ יועצי בלוקצ'יין