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