همانطور که Tensor
بلوک اصلی ما برای محاسبات موازی تسریع شده است، اکثر مدلها و عملیات یادگیری ماشین در قالب پروتکل Layer
بیان میشوند. Layer
یک رابط را برای انواعی تعریف می کند که ورودی قابل تفکیک را می گیرند، آن را پردازش می کنند و خروجی قابل تفکیک تولید می کنند. یک Layer
می تواند شامل حالت هایی مانند وزنه های قابل آموزش باشد.
Layer
اصلاح پروتکل Module
است، با Module
حالت کلی تری را تعریف می کند که در آن ورودی به نوع لزوماً قابل تمایز نیست. اکثر اجزای یک مدل با ورودی های قابل تفکیک سروکار دارند، اما مواردی وجود دارد که ممکن است به جای آن، انواع نیاز به مطابقت با Module
داشته باشند.
اگر عملیاتی را ایجاد کنید که هیچ پارامتر قابل آموزش در آن وجود نداشته باشد، میخواهید آن را به جای Layer
بر حسب ParameterlessLayer
تعریف کنید.
خود مدل ها اغلب به عنوان Layer
تعریف می شوند و به طور منظم از Layer
های دیگر تشکیل می شوند. یک مدل یا زیرواحد که به عنوان یک Layer
تعریف شده است را می توان مانند هر Layer
دیگری در نظر گرفت و امکان ساخت مدل های پیچیده دلخواه از مدل ها یا زیر واحدهای دیگر را فراهم می کند.
برای تعریف یک Layer
سفارشی برای یک مدل یا عملیات خود، معمولاً از الگوی مشابه زیر پیروی می کنید:
public struct MyModel: Layer {
// Define your layers or other properties here.
// A custom initializer may be desired to configure the model.
public init() {}
@differentiable
public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
// Define the sequence of operations performed on model input to arrive at the output.
return ...
}
}
اجزای قابل آموزش Layers
مانند وزن ها و بایاس ها و همچنین Layer
دیگر را می توان به عنوان ویژگی اعلام کرد. یک اولیه ساز سفارشی مکان خوبی برای نمایش پارامترهای قابل تنظیم برای یک مدل است، مانند تعداد متغیر لایه ها یا اندازه خروجی یک مدل طبقه بندی. در نهایت، هسته Layer
callAsFunction()
است که در آن انواع ورودی و خروجی و همچنین تبدیلی که یکی را می گیرد و دیگری را برمی گرداند، تعریف می کنید.
لایه های داخلی
بسیاری از عملیاتهای رایج یادگیری ماشین بهعنوان Layer
کپسوله شدهاند تا هنگام تعریف مدلها یا زیرواحدها از آنها استفاده کنید. در زیر لیستی از لایه های ارائه شده توسط Swift برای TensorFlow است که بر اساس مناطق عملکردی گروه بندی شده اند:
افزایش
پیچیدگی
- Conv1D
- Conv2D
- Conv3D
- متراکم
- DepthwiseConv2D
- SeparableConv1D
- SeparableConv2D
- TransposedConv1D
- TransposedConv2D
- TransposedConv3D
- ZeroPadding1D
- ZeroPadding2D
- ZeroPadding3D
جاسازی
ریخت شناسی
عادی سازی
ادغام
- AvgPool1D
- AvgPool2D
- AvgPool3D
- MaxPool1D
- MaxPool2D
- MaxPool3D
- FractionalMaxPool2D
- GlobalAvgPool1D
- GlobalAvgPool2D
- GlobalAvgPool3D
- GlobalMaxPool1D
- GlobalMaxPool2D
- GlobalMaxPool3D
شبکه های عصبی مکرر
تغییر شکل دادن
نمونه برداری
بهینه سازها
بهینه سازها جزء کلیدی آموزش یک مدل یادگیری ماشینی هستند که مدل را بر اساس یک گرادیان محاسبه شده به روز می کنند. این به روز رسانی ها به طور ایده آل پارامترهای یک مدل را به گونه ای تنظیم می کنند که مدل را آموزش دهد.
برای استفاده از بهینه ساز، ابتدا آن را برای یک مدل هدف با پارامترهای آموزشی مناسب مقداردهی کنید:
let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)
یک مدل را با به دست آوردن یک گرادیان با توجه به ورودی و یک تابع ضرر آموزش دهید و سپس با استفاده از بهینه ساز خود مدل را در امتداد آن گرادیان به روز کنید:
optimizer.update(&model, along: gradients)
بهینه سازهای داخلی
چندین بهینه ساز رایج توسط Swift برای TensorFlow ارائه شده است. این موارد شامل موارد زیر است: