מה זה קרס? הוסבר ה- API לרשת העצבים העמוקה

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

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

Keras ו- TensorFlow

בהתחשב בכך בפרויקט TensorFlow אמץ Keras כמו API ברמה הגבוהה עבור שחרורו הקרוב 2.0 TensorFlow, Keras שנראה זוכה, אם לא בהכרח הזוכה. במאמר זה נחקור את העקרונות וההטמעה של Keras, תוך התייחסות להבנה מדוע מדובר בשיפור בהשוואה ל- API של למידה עמוקה ברמה נמוכה.

אפילו ב- TensorFlow 1.12, ההדרכה הרשמית התחל בעבודה עם TensorFlow משתמשת ב- Keras API ברמה גבוהה המוטמע ב- TensorFlow, tf.keras . לעומת זאת, ה- API של TensorFlow Core דורש עבודה עם גרפים חישוביים, TensorFlow, פעולות והפעלות של TensorFlow, שחלקם יכול להיות קשה להבין כשאתה רק מתחיל לעבוד עם TensorFlow. ישנם כמה יתרונות לשימוש בממשק ה- API של TensorFlow Core ברמה נמוכה, בעיקר בעת ניפוי באגים, אך למרבה המזל תוכלו לערבב את ממשקי ה- API של TensorFlow ברמה גבוהה ונמוכה לפי הצורך.

עקרונות קרס

Keras נוצר כדי להיות ידידותי למשתמש, מודולרי, קל להרחבה ולעבוד עם Python. ממשק ה- API תוכנן "לבני אדם ולא למכונות" ו"מומלץ לפי שיטות עבודה מומלצות להפחתת העומס הקוגניטיבי ".

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

למה קרס?

הסיבות הגדולות ביותר לשימוש ב- Keras נובעות מהעקרונות המנחים שלה, בעיקר מהידידותיות למשתמש. מעבר לקלות הלמידה וקלות בניית המודלים, Keras מציע את היתרונות של אימוץ רחב, תמיכה במגוון רחב של אפשרויות פריסת ייצור, אינטגרציה עם לפחות חמישה מנועי עורפיים (TensorFlow, CNTK, Theano, MXNet ו- PlaidML), ותמיכה חזקה במספר GPUs והדרכה מבוזרת. בנוסף, Keras מגובה על ידי גוגל, מיקרוסופט, אמזון, אפל, Nvidia, Uber ואחרים.

גב קרס מסתיים

Keras proper לא עושה פעולות ברמה נמוכה משלה, כגון מוצרי טנזור ומפתלים; זה מסתמך על מנוע אחורי בשביל זה. למרות שקראס תומך במספר מנועי אחורי, הקצה הראשי (והברירת המחדל) שלו הוא TensorFlow, והתומך העיקרי שלה הוא גוגל. ה- API של Keras מגיע ארוז ב- TensorFlow as tf.keras, אשר כאמור יהפוך לממשק ה- API העיקרי של TensorFlow החל מ- TensorFlow 2.0.

כדי לשנות קצוות אחוריים, פשוט ערוך את $HOME/.keras/keras.jsonהקובץ שלך וציין שם אחורי אחר, כגון theanoאו CNTK. לחלופין, באפשרותך לעקוף את הקצה האחורי המוגדר על ידי הגדרת משתנה הסביבה KERAS_BACKEND, במעטפת שלך או בקוד הפייתון שלך באמצעות os.environ["KERAS_BACKEND"]המאפיין.

דגמי קרס

הדגם הוא מבנה נתוני Keras ליבה. ישנם שני סוגים עיקריים של דגמים זמינים ב- Keras: Sequentialהמודל והמחלקה Modelהמשמשת עם ה- API הפונקציונלי.

דגמי רצף קרס

Sequentialהמודל הוא ערימה ליניארי של שכבות, ואת השכבות ניתן לתאר מאוד פשוט. הנה דוגמה מתיעוד Keras המשמש model.add()להגדרת שתי שכבות צפופות Sequentialבמודל:

יבוא קרס

מאת keras.models לייבא רצף

מ keras.layers לייבא צפוף

# צור מודל רציף עם שכבות צפופות, בשיטת הוספה

#Dense מיישמת את הפעולה:

# פלט = הפעלה (נקודה (קלט, גרעין) + הטיה)

# יחידות הן המידות של שטח הפלט לשכבה,

# השווה למספר היחידות הנסתרות

# פונקציות הפעלה ואובדן עשויות להיות מוגדרות על ידי מחרוזות או מחלקות

model.add (צפוף (יחידות = 10, הפעלה = "softmax"))

# שיטת הקומפילציה מגדירה את תהליך הלמידה של המודל

              אופטימיזציה = "sgd",

              מדדים = ['דיוק']]

# שיטת ההתאמה עושה את האימון בקבוצות

# x_train ו- y_train הם מערכים Numpy - ממש כמו ב- API של Scikit-Learn.

# שיטת הערכה מחשבת את ההפסדים והמדדים

# למודל המאומן

# שיטת החיזוי מיישמת את המודל המאומן על תשומות

# לייצור תפוקות

מחלקות = model.predict (x_test, batch_size = 128)

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

ממשק API פונקציונלי של Keras

המודל הרצפי של Keras הוא פשוט אך מוגבל בטופולוגיית המודל. ה- API הפונקציונלי של Keras שימושי ליצירת מודלים מורכבים, כגון מודלים מרובי קלט / רב פלט, גרפים אסיקליים מכוונים (DAG) ומודלים עם שכבות משותפות.

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

מאת keras.layers לייבא קלט, צפוף

מתוך דגם הייבוא ​​keras.models

# זה מחזיר טנזור

# ניתן להשתמש במופע שכבה בטנזור ומחזיר טנזור

x = צפוף (64, הפעלה = "relu") (x)

חיזויים = צפוף (10, הפעלה = "softmax") (x)

# זה יוצר מודל שכולל

# שכבת הקלט ושלוש שכבות צפופות

model.compile (מיטוב = 'rmsprop',

              הפסד = "קטגוריות_קרוסנטרופיה",

              מדדים = ['דיוק']]

model.fit (נתונים, תוויות)  # מתחיל להתאמן

שכבות קרס

בדוגמאות הקודמות השתמשנו רק Denseבשכבות. ל- Keras מגוון רחב של סוגי שכבות מוגדרים מראש, ותומכת גם בכתיבת שכבות משלך.

שכבות ליבה כוללות Dense(מוצר נקודה פלוס הטיה), Activation(פונקציית העברה או צורת נוירון), Dropout(הגדר באופן אקראי חלק של יחידות קלט ל -0 בכל עדכון אימונים כדי למנוע התאמה יתר), Lambda(עוטף ביטוי שרירותי Layerכאובייקט), וכמה אחרים . שכבות פיתול (שימוש בפילטר ליצירת מפת תכונות) עוברות מ- 1D ל- 3D וכוללות את הווריאציות הנפוצות ביותר, כגון חיתוך ושכבות פיתול מועברות לכל מימד. קונבולציה דו-ממדית, בהשראת הפונקציונליות של קליפת המוח החזותית, משמשת בדרך כלל לזיהוי תמונות.

שכבות בריכה (צמצום צמצום) עוברות בין 1D ל -3 D וכוללות את הגרסאות הנפוצות ביותר, כגון איגום מקסימלי וממוצע. שכבות מחוברות מקומית פועלות כמו שכבות קונבולוציה, אלא שהמשקולות אינן משותפות. שכבות חוזרות כוללות הישנות פשוטה (מחוברת לחלוטין), מגודרת, LSTM ואחרים; אלה שימושיים לעיבוד שפה, בין יישומים אחרים. שכבות רעש עוזרות להימנע מהתאמת יתר.

מערכי נתונים של קרס

Keras מספקת שבעה ממערכי הנתונים המדויקים של למידה עמוקה באמצעות keras.datasetsהכיתה. זה כולל תמונות צבע קטנות של cifar10 ו- cifar100, ביקורות על סרטי IMDB, נושאי רשת החדשות של רויטרס, ספרות MNIST בכתב יד, תמונות אופנה של MNIST ומחירי דיור בבוסטון.

יישומי Keras ודוגמאות

Keras מספקת גם עשרה דגמים ידועים, המכונים יישומי Keras, המומנים מראש מול ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. אתה יכול להשתמש באלה כדי לחזות את סיווג התמונות, לחלץ תכונות מהן ולכוונן את המודלים על קבוצה אחרת של מחלקות.

אגב, כוונון עדין של דגמים קיימים הוא דרך טובה להאיץ את האימונים. לדוגמה, אתה יכול להוסיף שכבות כרצונך, להקפיא את שכבות הבסיס כדי לאמן את השכבות החדשות, ואז לפרוק חלק משכבות הבסיס כדי לכוונן את האימון. אתה יכול להקפיא שכבה באמצעות הגדרה layer.trainable = False.

מאגר הדוגמאות של Keras מכיל יותר מ -40 מודלים לדוגמה. הם מכסים מודלים של חזון, טקסט ורצפים ומודלים גנרטיים.

פריסת קרס

ניתן לפרוס מודלים של Keras במגוון עצום של פלטפורמות, אולי יותר מכל מסגרת למידה עמוקה אחרת. זה כולל iOS, באמצעות CoreML (נתמך על ידי Apple); אנדרואיד, דרך זמן הריצה של אנדרואיד TensorFlow; בדפדפן, דרך Keras.js ו- WebDNN; בענן Google, באמצעות TensorFlow-Serving; ב- backapp של פייתון. ב- JVM, באמצעות ייבוא ​​דגם DL4J; ועל פטל פי.

כדי להתחיל לעבוד עם Keras, קרא את התיעוד, בדוק את מאגר הקוד, התקן את TensorFlow (או מנוע אחורי אחר) ואת Keras, ונסה את המדריך לתחילת העבודה למודל Keras Sequential משם תוכלו להתקדם להדרכות אחרות, ובסופו של דבר לחקור את דוגמאות Keras.