מדריך מהיר ליצירת ייצוג דיאגרמטי של הרשתות העצביות שלך באמצעות Jupyter או Google Colab
לעתים קרובות, תוך כדי עבודה עם רשתות עצביות מלאכותיות או וריאציות אחרות כמו Convolution Neural Networks או Recurrent Neural Networks, אנו רוצים לדמיין וליצור ייצוג דיאגרמטי של המודל המלודר שלנו. זה יכול לפתור שתי מטרות:
- תוך הגדרה והכשרה של מספר מודלים מאפשר לנו לדמיין את עומק המודל שלנו ולהשוות רבדים שונים וכיצד הם מונחים ברצף.
- מאפשר הבנה טובה יותר של מבנה המודל, פונקציות ההפעלה המשמשות בכל שכבה, צורה של כל שכבה (מספר נוירונים), ופרמטרים שיש לאמן
ישנן כמה חבילות זמינות ב-python שיכולות ליצור ייצוג חזותי של מודלים של רשתות עצביות שלנו. ניתן להשתמש בשלוש החבילות הראשונות עוד לפני הדרכה של מודל (יש להגדיר ולהרכיב את המודל בלבד); עם זאת, Tensor Boards דורש מהמשתמש לאמן את המודל על נתונים מדויקים לפני שניתן להמחיש את הארכיטקטורה.
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”)
כלי 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)
אל האני 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=נכון,)
כמה היפרפרמטרים שיש לקחת בחשבון:
- מודל: מופע של מודל או אובייקט דגם מהידור Keras
- לתייק: שם הקובץ של התמונה
- show_shapes: להציג מימד וצורה של כל שכבה ברשת העצבית
- show_layer_activation: להציג פונקציות הפעלה המשמשות בתוך הנוירונים
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).
הקשר נוסף על אופן השימוש ב- 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
<!–
->