Swift برای TensorFlow (در حالت بایگانی)

Swift for TensorFlow آزمایشی در پلتفرم نسل بعدی برای یادگیری ماشینی بود که آخرین تحقیقات را در زمینه یادگیری ماشینی، کامپایلرها، برنامه‌نویسی متمایز، طراحی سیستم‌ها و فراتر از آن به کار می‌برد. در فوریه 2021 بایگانی شد. برخی از دستاوردهای مهم این پروژه عبارتند از:

این سایت به روز رسانی های بیشتری دریافت نخواهد کرد. اسناد API و بارگیری‌های باینری و همچنین ضبط‌های جلسه بررسی Open Design همچنان در دسترس خواهند بود.

سویفت

سوئیفت یک زبان برنامه نویسی همه منظوره منبع باز است که پایگاه کاربری بزرگ و رو به رشدی دارد. ما Swift را انتخاب کردیم زیرا دارای یک فرآیند طراحی زبان باز است و به دلایل فنی خاص که در سند " Why Swift for TensorFlow " توضیح داده شده است. ما فرض می کنیم که اکثر خوانندگان با آن آشنا نیستند، بنابراین در اینجا به طور خلاصه به موارد مهم دیگری در مورد آن می پردازیم.

توسعه سوئیفت در سال 2010 آغاز شد و هدف آن این بود که بهترین شیوه ها در طراحی زبان برنامه نویسی را در یک سیستم به جای تلاش برای تازگی آکادمیک یا تبلیغ مذهبی روش های برنامه نویسی، در یک سیستم جمع کند. در نتیجه، از توسعه چند پارادایم (مانند عملکردی، OOP، عمومی، رویه‌ای و غیره) همه در یک سیستم پشتیبانی می‌کند و بسیاری از مفاهیم شناخته‌شده را از زبان‌های دانشگاهی (مانند تطبیق الگو ، انواع داده‌های جبری ، و کلاس‌های نوع) به ارمغان می‌آورد. در خط مقدم قرار گیرد. به‌جای تشویق شدید توسعه‌دهندگان به بازنویسی همه کدهای خود در سوئیفت، به طور عملی بر قابلیت همکاری با زبان‌های دیگر تمرکز می‌کند، به عنوان مثال، به شما اجازه می‌دهد مستقیماً فایل‌های هدر C را وارد کنید و از آنها بدون FFI استفاده کنید و (اکنون) توانایی استفاده از APIهای پایتون بدون بسته‌بندی .

هدف جسورانه سوئیفت این است که از برنامه نویسی سیستم های سطح پایین تا اسکریپت نویسی سطح بالا را با تمرکز بر یادگیری و استفاده آسان بپوشاند. از آنجایی که سوئیفت باید آسان برای یادگیری و استفاده باشد، اما همچنین قدرتمند باشد، بر اصل افشای تدریجی پیچیدگی تکیه دارد، که به طور تهاجمی هزینه پیچیدگی را برای افرادی که از آن پیچیدگی سود می برند، تعیین می کند. "احساس زبان اسکریپت" همراه با عملکرد بالا برای یادگیری ماشین بسیار مفید است.

آخرین جنبه مربوط به طراحی سوئیفت این است که بسیاری از زبان سوئیفت در واقع در کتابخانه استاندارد آن پیاده سازی شده است. انواع "Builtin" مانند Int و Bool در واقع فقط ساختارهایی هستند که در کتابخانه استاندارد تعریف شده اند که انواع و عملیات جادویی را در بر می گیرند. به این ترتیب، گاهی اوقات ما به شوخی می گوییم که سوئیفت فقط "شکر نحوی برای LLVM" است.

چیزهای بسیار جالب دیگری در مورد Swift و تعداد زیادی محتوای آنلاین موجود است. اگر علاقه مند به یادگیری بیشتر در مورد مفاهیم کلی برنامه نویسی Swift هستید، در اینجا چند لینک برای شروع وجود دارد:

یک هشدار: سوئیفت در سال های اولیه خود به سرعت تکامل یافت، بنابراین باید مراقب هر چیزی قبل از Swift 3 (منتشر شده در سال 2016) باشید.

چرا سوئیفت برای تنسورفلو؟

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 یک کتابخانه مدرن یادگیری عمیق کمک کند. می توانید در عرض چند ثانیه مستقیماً در مرورگر خود شروع کنید !

مهاجرت به سویفت برای TensorFlow به لطف ادغام قدرتمند پایتون سوئیفت بسیار آسان است. شما می توانید به صورت تدریجی کد پایتون خود را منتقل کنید (یا به استفاده از کتابخانه های پایتون مورد علاقه خود ادامه دهید)، زیرا به راحتی می توانید کتابخانه 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!