Swift עבור TensorFlow (במצב ארכיון)

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

אתר זה לא יקבל עדכונים נוספים. תיעוד ה-API וההורדות הבינאריות ימשיכו להיות נגישים, כמו גם הקלטות הפגישות של Open Design Review .

מָהִיר

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

הפיתוח של סוויפט החל ב-2010, ומטרתו לרכז את השיטות הטובות ביותר בעיצוב שפת תכנות למערכת אחת במקום לנסות לחדש אקדמיים או להפיץ מתודולוגיות תכנות באופן דתי. כתוצאה מכך, הוא תומך בפיתוח רב פרדיגמות (למשל פונקציונלי, OOP, גנרי, פרוצדורלי וכו') הכל במערכת אחת, ומביא מושגים ידועים רבים משפות אקדמיות (למשל התאמת דפוסים , סוגי נתונים אלגבריים ומחלקות סוגים) לקדמת הבמה. במקום לעודד מפתחים לשכתב מחדש את כל הקוד שלהם ב-Swift, הוא מתמקד באופן פרגמטי ביכולת פעולה הדדית עם שפות אחרות, למשל, מאפשר לך לייבא ישירות קבצי כותרות C ולהשתמש בהם ללא FFI ו(עכשיו) את היכולת להשתמש בממשקי Python API ללא עטיפות .

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

היבט אחרון רלוונטי בעיצוב של Swift הוא שחלק גדול משפת Swift מיושם בפועל בספרייה הסטנדרטית שלה. סוגי "מובנים" כמו Int ו- Bool הם למעשה רק מבנים המוגדרים בספרייה הסטנדרטית שעוטפים סוגי קסם ופעולות. ככזה, לפעמים אנחנו מתבדחים שסוויפט הוא רק "סוכר תחבירי עבור LLVM".

יש עוד הרבה דברים מגניבים בסוויפט והמון תוכן זמין באינטרנט. אם אתה מעוניין ללמוד עוד על מושגי תכנות כלליים של 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!