Swift for TensorFlow היה ניסוי בפלטפורמת הדור הבא ללמידת מכונה, המשלבת את המחקר העדכני ביותר על פני למידת מכונה, מהדרים, תכנות שניתן להבדיל, עיצוב מערכות ומעבר לכך. הוא הועבר לארכיון בפברואר 2021. כמה הישגים משמעותיים מפרויקט זה כוללים:
- הוספת תכנות ניתן להבדיל משולבת בשפה לשפת Swift. עבודה זו נמשכת במהדר הסוויפט הרשמי.
- פיתח ממשק API ללמידה עמוקה מונחה-ערך-סמנטיקה
- טיפח פיתוח של גן מודל עם יותר מ -30 דגמים ממגוון דיסציפלינות למידה עמוקה .
- אפשר מחקר חדשני המשלב למידה עמוקה עם מודלים גרפיים הסתברותיים למעקב אחר תנועה בתלת מימד ומעבר לכך.
- מופעל על (n כמעט) אב טיפוס טהור-Swift של זמן ריצה של GPU+CPU התומך ב-pmap .
- סילקו מאמצי צד מרובים של קוד פתוח שממשיכים להיות בפיתוח פעיל:
- PythonKit : יכולת פעולה הדדית של Python עם Swift.
- swift-jupyter : מאפשר שימוש ב-Swift בתוך מחברות Jupyter.
- swift-benchmark : מספק חבילת מידוד חזקה עבור קוד Swift.
- סילקה כמה מאמצי קוד פתוח אחרים:
- פינגווין : תכנות מקביל, מבני נתונים, אלגוריתמי גרפים ועוד.
- טנסורים מתאימים בצורה מושלמת : ניתוח סטטי של אי-התאמה של צורת הטנסור.
- הצעות Swift-Evolution שהוצעו ויושמו:
אתר זה לא יקבל עדכונים נוספים. תיעוד ה-API וההורדות הבינאריות ימשיכו להיות נגישים, כמו גם הקלטות הפגישות של Open Design Review .
מָהִיר
Swift היא שפת תכנות למטרות כלליות בקוד פתוח , שיש לה בסיס משתמשים גדול וגדל. בחרנו ב-Swift כי יש לה תהליך עיצוב שפה פתוח ומסיבות טכניות ספציפיות המפורטות במסמך " למה Swift for TensorFlow ". אנו מניחים שרוב הקוראים אינם מכירים אותו, אז ניגע בקצרה בכמה דברים חשובים נוספים בנושא כאן.
הפיתוח של סוויפט החל ב-2010, ומטרתו לרכז את השיטות הטובות ביותר בעיצוב שפת תכנות למערכת אחת במקום לנסות לחדש אקדמיים או להפיץ מתודולוגיות תכנות באופן דתי. כתוצאה מכך, הוא תומך בפיתוח רב פרדיגמות (למשל פונקציונלי, OOP, גנרי, פרוצדורלי וכו') הכל במערכת אחת, ומביא מושגים ידועים רבים משפות אקדמיות (למשל התאמת דפוסים , סוגי נתונים אלגבריים ומחלקות סוגים) לקדמת הבמה. במקום לעודד מפתחים לשכתב מחדש את כל הקוד שלהם ב-Swift, הוא מתמקד באופן פרגמטי ביכולת פעולה הדדית עם שפות אחרות, למשל, מאפשר לך לייבא ישירות קבצי כותרות C ולהשתמש בהם ללא FFI ו(עכשיו) את היכולת להשתמש בממשקי Python API ללא עטיפות .
ל- Swift יש מטרה נועזת להתפרש לאורך כל הדרך מתכנות מערכות ברמה נמוכה ועד סקריפטים ברמה גבוהה, תוך התמקדות בלהיות קלה ללמידה ולשימוש . מכיוון שסוויפט צריכה להיות קלה ללמידה ולשימוש אך גם בעלת עוצמה, היא מסתמכת על העיקרון של גילוי פרוגרסיבי של מורכבות , אשר גורם באגרסיביות את עלות המורכבות על האנשים שנהנים מהמורכבות הזו. "תחושת שפת הסקריפט" בשילוב עם ביצועים גבוהים שימושיים מאוד ללמידת מכונה.
היבט אחרון רלוונטי בעיצוב של Swift הוא שחלק גדול משפת Swift מיושם בפועל בספרייה הסטנדרטית שלה. סוגי "מובנים" כמו Int ו- Bool הם למעשה רק מבנים המוגדרים בספרייה הסטנדרטית שעוטפים סוגי קסם ופעולות. ככזה, לפעמים אנחנו מתבדחים שסוויפט הוא רק "סוכר תחבירי עבור LLVM".
יש עוד הרבה דברים מגניבים בסוויפט והמון תוכן זמין באינטרנט. אם אתה מעוניין ללמוד עוד על מושגי תכנות כלליים של Swift, הנה כמה קישורים כדי להתחיל:
- סיור סוויפט הוא סיור שניתן לרחפן על התחביר והתחושה ברמה הגבוהה של סוויפט, והוא חלק מהספר הגדול יותר "שפת התכנות של סוויפט".
- סמנטיקה של ערכים היא רבת עוצמה וממלאת תפקיד חשוב בקוד Swift, כפי שהוסבר ב"בניית אפליקציות טובות יותר עם סוגי ערך ב-Swift " [ YouTube ].
- Swift תומכת ב-OOP הקלאסי, אך יש לה רעיונות מהמערכת מסוג Haskell. זה מוסבר ב"תכנות מונחה פרוטוקול בסוויפט " [ YouTube ].
אזהרה אחת: סוויפט התפתחה במהירות בשנותיה הראשונות, אז כדאי להיזהר בכל דבר לפני Swift 3 (ששוחרר ב-2016).
למה Swift עבור TensorFlow?
Swift for TensorFlow היא דרך חדשה לפיתוח מודלים של למידת מכונה. זה נותן לך את העוצמה של TensorFlow המשולבת ישירות בשפת התכנות Swift . אנו מאמינים שפרדיגמות למידת מכונה הן כל כך חשובות שהן ראויות לתמיכה בשפה ובמהדרים מהשורה הראשונה .
פרימיטיבי בסיסי בלמידת מכונה הוא אופטימיזציה מבוססת גרדיאנט: מחשוב נגזרות של פונקציות כדי לייעל פרמטרים. עם Swift for TensorFlow, אתה יכול להבדיל בקלות פונקציות באמצעות אופרטורים דיפרנציאליים כמו gradient(of:)
, או להבדיל ביחס למודל שלם על ידי קריאת שיטת gradient(in:)
. ממשקי API אלה של בידול לא זמינים רק עבור מושגים הקשורים ל- Tensor
- הם מוכללים עבור כל הסוגים התואמים את פרוטוקול 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 מגיע עם שרשרת כלים מתוחכמת כדי להפוך את המשתמשים ליותר פרודוקטיביים. אתה יכול להפעיל את Swift באופן אינטראקטיבי במחברת Jupyter, ולקבל הצעות השלמה אוטומטית מועילות שיעזרו לך לחקור את משטח ה-API האדיר של ספריית למידה עמוקה מודרנית. אתה יכול להתחיל ישירות בדפדפן שלך תוך שניות !
המעבר ל-Swift עבור TensorFlow הוא ממש קל הודות לאינטגרציה החזקה של Python של Swift. אתה יכול להעביר בהדרגה את קוד Python שלך (או להמשיך להשתמש בספריות Python המועדפות עליך), מכיוון שאתה יכול בקלות לקרוא לספריית Python האהובה עליך עם תחביר מוכר:
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!