Swift for TensorFlow היה ניסוי בפלטפורמה של הדור הבא ללימוד מכונה, ושילב את המחקר העדכני ביותר על למידת מכונות, מהדרים, תכנות מובחן, תכנון מערכות ועוד. הוא הועבר לארכיון בפברואר 2021. כמה מהישגים משמעותיים מפרויקט זה כוללים:
- הוסיף תכנות מובחנות משולבות בשפה לשפה המהירה. עבודה זו נמשכת במהדר הרשמי של סוויפט.
- פיתח ממשק API למידה עמוקה לשינוי-ערך-סמנטיקה
- טיפח בפיתוח גן מודלים עם יותר מ -30 דגמים ממגוון תחומי למידה עמוקה .
- אפשר מחקר חדשני המשלב למידה עמוקה עם מודלים גרפיים הסתברותיים למעקב אחר תנועות תלת מימד ומעבר לכך.
- הפעל אב טיפוס מהיר (כמעט) טהור של זמן ריצה של GPU + CPU התומך ב- pmap .
- ניתק מספר מאמצים בצד הקוד הפתוח אשר ממשיכים להיות בפיתוח פעיל:
- PythonKit : יכולת פעולה הדדית של Python עם סוויפט.
- swift-jupyter : מאפשר שימוש ב- Swift בתוך מחברות Jupyter.
- מהיר ביצועים : מספק חבילת ביצוע ביצועים מהירה עבור קוד Swift.
- הפריש כמה מאמצים קוד פתוח אחר:
- פינגווין : תכנות מקביל, מבני נתונים, אלגוריתמי גרפים ועוד.
- טנדרים מתאימים בצורה מושלמת : ניתוח סטטי של אי התאמות בין צורות הטנזורים.
- הצעות והתפתחות מהירות של אבולוציה מהירה:
אתר זה לא יקבל עדכונים נוספים. תיעוד ה- API וההורדות הבינאריות ימשיכו להיות נגישים כמו גם הקלטות הפגישות Open Design Review .
מָהִיר
סוויפט היא שפת תכנות לשימוש כללי בקוד פתוח , שיש לה בסיס משתמשים גדול וגדל. בחרנו ב- Swift מכיוון שיש לה תהליך עיצוב בשפה פתוחה ומסיבות טכניות ספציפיות המפורטות במסמך " למה Swift for TensorFlow ". אנו מניחים שרוב הקוראים אינם מכירים זאת, לכן ניגע בקצרה בכמה דברים חשובים נוספים בנושא כאן.
התפתחותה של סוויפט החלה בשנת 2010, ומטרתה להביא את השיטות המומלצות בעיצוב שפות תכנות למערכת אחת במקום לנסות חידוש אקדמי או להפיץ מתודולוגיות תכנות באדיקות. כתוצאה מכך, הוא תומך בפיתוח רב-פרדיגמה (למשל פונקציונלי, OOP, כללי, פרוצדורלי וכו ') במערכת אחת ומביא מושגים ידועים רבים משפות אקדמיות (למשל התאמת תבניות , סוגי נתונים אלגבריים ושיעורי סוג) לקדמת הבמה. במקום לעודד מאוד מפתחים לכתוב מחדש את כל הקוד שלהם ב- Swift, זה מתמקד באופן פרגמטי בתאימות עם שפות אחרות, למשל, מאפשר לך לייבא ישירות קבצי כותרת C ולהשתמש בהם ללא FFI ו (כעת) את היכולת להשתמש בממשקי API של Python ללא עטיפות. .
לסוויפט מטרה נועזת להפיץ את כל הדרך מתכנות מערכות ברמה נמוכה ועד סקריפטים ברמה גבוהה, עם דגש על קלות למידה ושימוש . מכיוון שסוויפט צריכה להיות קלה ללימוד ושימוש אך גם חזקה, היא נשענת על עיקרון הגילוי המתקדם של המורכבות , הגורם לאגרסיביות את עלות המורכבות לאנשים הנהנים ממורכבות זו. "תחושת שפת התסריט" בשילוב עם ביצועים גבוהים שימושית מאוד ללימוד מכונה.
היבט רלוונטי אחרון בתכנון של סוויפט הוא שחלק גדול מהשפה הסוויפט מיושם בפועל בספריה הסטנדרטית שלה. סוגי "Builtin" כמו Int ו- Bool הם למעשה רק סטרוקטורות המוגדרות בספרייה הסטנדרטית העוטפות סוגי קסמים ופעולות. ככזה, לפעמים אנחנו מתבדחים שסוויפט הוא רק "סוכר תחבירי ל- LLVM".
יש הרבה יותר מגניב בסוויפט והמון תוכן זמין ברשת. אם אתה מעוניין ללמוד יותר על מושגי תכנות כלליים של סוויפט, הנה כמה קישורים להתחלה:
- סיור מהיר הוא סיור שניתן לרחוב בתחביר ובתחושה ברמה הגבוהה של סוויפט, והוא חלק מהספר הגדול יותר "שפת התכנות המהירה".
- סמנטיקה של ערך הינה עוצמתית וממלאת תפקיד חשוב בקוד סוויפט, כפי שמוסבר ב"בניית אפליקציות טובות יותר עם סוגי ערכים בסוויפט "[ YouTube ].
- סוויפט תומכת ב- OOP קלאסי, אך התאימה רעיונות ממערכת מסוג Haskell. זה מוסבר ב"תכנות מונחה פרוטוקול בסוויפט "[ יוטיוב ].
אזהרה אחת: סוויפט התפתחה במהירות בשנותיה הראשונות, לכן עליכם להיזהר בכל דבר לפני סוויפט 3 (שוחרר בשנת 2016).
מדוע סוויפט ל- TensorFlow?
Swift for TensorFlow היא דרך חדשה לפתח מודלים של למידת מכונה. זה נותן לך את הכוח של TensorFlow המשולב ישירות בשפת התכנות סוויפט . אנו מאמינים שפרדיגמות למידת מכונה הן כה חשובות עד כי הן ראויות לתמיכה מהשורה הראשונה ומהדר .
פרימיטיב בסיסי בלימוד מכונה הוא אופטימיזציה מבוססת שיפוע: נגזרות פונקציות מחשוב לייעול פרמטרים. עם Swift for TensorFlow, אתה יכול בקלות להבדיל בין פונקציות באמצעות אופרטורים דיפרנציאליים כמו gradient(of:)
, או להבדיל ביחס למודל שלם על ידי קריאת gradient(in:)
השיטה gradient(in:)
. APIs הבידול אלה איננו זמינים רק עבור Tensor
-related מושגים-הם כלליים לכל סוגים התואמים את Differentiable
הפרוטוקול, כולל Float
, Double
, וקטורי SIMD, ומבני נתונים משלך.
// Custom differentiable type.
struct Model: Differentiable {
var w: Float
var b: Float
func applied(to input: Float) -> Float {
return w * input + b
}
}
// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
model.applied(to: input)
}
print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0
מעבר לנגזרות, פרויקט Swift for TensorFlow מגיע עם שרשרת כלים מתוחכמת כדי להפוך את המשתמשים לפרודוקטיביים יותר. אתה יכול להריץ את סוויפט באופן אינטראקטיבי במחברת Jupyter ולקבל הצעות מועילות להשלמה אוטומטית שיעזרו לך לחקור את משטח ה- API העצום של ספריית למידה עמוקה מודרנית. אתה יכול להתחיל מיד בדפדפן תוך שניות !
המעבר לסוויפט עבור TensorFlow הוא ממש קל הודות לשילוב הפיתון החזק של סוויפט. באפשרותך להעביר את קוד הפייתון שלך באופן הדרגתי (או להמשיך להשתמש בספריות הפיתון המועדפות עליך), מכיוון שאתה יכול להתקשר בקלות לספריית הפיתון המועדפת עליך עם תחביר מוכר:
import TensorFlow
import Python
let np = Python.import("numpy")
let array = np.arange(100).reshape(10, 10) // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array) // Seamless integration!