Swift for TensorFlow آزمایشی در پلتفرم نسل بعدی برای یادگیری ماشینی بود که آخرین تحقیقات را در زمینه یادگیری ماشینی، کامپایلرها، برنامهنویسی متمایز، طراحی سیستمها و فراتر از آن به کار میبرد. در فوریه 2021 بایگانی شد. برخی از دستاوردهای مهم این پروژه عبارتند از:
- برنامه نویسی متمایز ادغام شده با زبان به زبان سوئیفت اضافه شد. این کار در کامپایلر رسمی سوئیفت ادامه دارد.
- یک API یادگیری عمیق مبتنی بر ارزش-معناشناسی تغییرپذیر ایجاد کرد
- توسعه یک باغ نمونه با بیش از 30 مدل از انواع رشته های یادگیری عمیق را تشویق کرد.
- تحقیقات جدید فعال که یادگیری عمیق را با مدلهای گرافیکی احتمالی برای ردیابی حرکت سه بعدی و فراتر از آن ترکیب میکند .
- یک (n) نمونه اولیه خالص سوئیفت از یک GPU+CPU که از pmap پشتیبانی میکند .
- چندین تلاش جانبی منبع باز را که همچنان در حال توسعه فعال هستند، حذف کرد:
- PythonKit : قابلیت همکاری پایتون با سوئیفت.
- swift-jupyter : استفاده از Swift را در نوت بوک های Jupyter فعال می کند.
- swift-benchmark : مجموعه محک زنی قوی برای کد سوئیفت ارائه می دهد.
- چندین تلاش منبع باز دیگر را حذف کرد:
- پنگوئن : برنامه نویسی موازی، ساختارهای داده، الگوریتم های نمودار و موارد دیگر.
- تناسب کامل تانسورها : تحلیل استاتیکی عدم تطابق شکل تانسور.
- پیشنهادات تکامل سریع پیشنهاد و اجرا شد:
این سایت به روز رسانی های بیشتری دریافت نخواهد کرد. اسناد API و بارگیریهای باینری و همچنین ضبطهای جلسه بررسی Open Design همچنان در دسترس خواهند بود.
سویفت
سوئیفت یک زبان برنامه نویسی همه منظوره منبع باز است که پایگاه کاربری بزرگ و رو به رشدی دارد. ما Swift را انتخاب کردیم زیرا دارای یک فرآیند طراحی زبان باز است و به دلایل فنی خاص که در سند " Why Swift for TensorFlow " توضیح داده شده است. ما فرض می کنیم که اکثر خوانندگان با آن آشنا نیستند، بنابراین در اینجا به طور خلاصه به موارد مهم دیگری در مورد آن می پردازیم.
توسعه سوئیفت در سال 2010 آغاز شد و هدف آن این بود که بهترین شیوه ها در طراحی زبان برنامه نویسی را در یک سیستم به جای تلاش برای تازگی آکادمیک یا تبلیغ مذهبی روش های برنامه نویسی، در یک سیستم جمع کند. در نتیجه، از توسعه چند پارادایم (مانند عملکردی، OOP، عمومی، رویهای و غیره) همه در یک سیستم پشتیبانی میکند و بسیاری از مفاهیم شناختهشده را از زبانهای دانشگاهی (مانند تطبیق الگو ، انواع دادههای جبری ، و کلاسهای نوع) به ارمغان میآورد. در خط مقدم قرار گیرد. بهجای تشویق شدید توسعهدهندگان به بازنویسی همه کدهای خود در سوئیفت، به طور عملی بر قابلیت همکاری با زبانهای دیگر تمرکز میکند، به عنوان مثال، به شما اجازه میدهد مستقیماً فایلهای هدر C را وارد کنید و از آنها بدون FFI استفاده کنید و (اکنون) توانایی استفاده از APIهای پایتون بدون بستهبندی .
هدف جسورانه سوئیفت این است که از برنامه نویسی سیستم های سطح پایین تا اسکریپت نویسی سطح بالا را با تمرکز بر یادگیری و استفاده آسان بپوشاند. از آنجایی که سوئیفت باید آسان برای یادگیری و استفاده باشد، اما همچنین قدرتمند باشد، بر اصل افشای تدریجی پیچیدگی تکیه دارد، که به طور تهاجمی هزینه پیچیدگی را برای افرادی که از آن پیچیدگی سود می برند، تعیین می کند. "احساس زبان اسکریپت" همراه با عملکرد بالا برای یادگیری ماشین بسیار مفید است.
آخرین جنبه مربوط به طراحی سوئیفت این است که بسیاری از زبان سوئیفت در واقع در کتابخانه استاندارد آن پیاده سازی شده است. انواع "Builtin" مانند Int و Bool در واقع فقط ساختارهایی هستند که در کتابخانه استاندارد تعریف شده اند که انواع و عملیات جادویی را در بر می گیرند. به این ترتیب، گاهی اوقات ما به شوخی می گوییم که سوئیفت فقط "شکر نحوی برای LLVM" است.
چیزهای بسیار جالب دیگری در مورد Swift و تعداد زیادی محتوای آنلاین موجود است. اگر علاقه مند به یادگیری بیشتر در مورد مفاهیم کلی برنامه نویسی Swift هستید، در اینجا چند لینک برای شروع وجود دارد:
- تور سوئیفت یک تور قابل مشاهده از نحو سطح بالا و احساس سوئیفت است و بخشی از کتاب بزرگتر "زبان برنامه نویسی سویفت" است.
- همانطور که در " ساخت برنامه های بهتر با انواع ارزش در سوئیفت " [ YouTube ] توضیح داده شد، معناشناسی ارزش قدرتمند است و نقش مهمی در کد سوئیفت بازی می کند.
- Swift از OOP کلاسیک پشتیبانی می کند، اما ایده هایی را از سیستم نوع Haskell اقتباس کرده است. این در " برنامه نویسی پروتکل گرا در سوئیفت " [ YouTube ] توضیح داده شده است.
یک هشدار: سوئیفت در سال های اولیه خود به سرعت تکامل یافت، بنابراین باید مراقب هر چیزی قبل از 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!