עזרה להגן על שונית המחסום הגדולה עם TensorFlow על Kaggle הצטרפו אתגר

סוויפט עבור TensorFlow (במצב ארכיון)

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

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

מָהִיר

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

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

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

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

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

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