لایه های

همانطور که 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 است که بر اساس مناطق عملکردی گروه بندی شده اند:

افزایش

پیچیدگی

جاسازی

ریخت شناسی

عادی سازی

ادغام

شبکه های عصبی مکرر

تغییر شکل دادن

نمونه برداری

بهینه سازها

بهینه سازها جزء کلیدی آموزش یک مدل یادگیری ماشینی هستند که مدل را بر اساس یک گرادیان محاسبه شده به روز می کنند. این به روز رسانی ها به طور ایده آل پارامترهای یک مدل را به گونه ای تنظیم می کنند که مدل را آموزش دهد.

برای استفاده از بهینه ساز، ابتدا آن را برای یک مدل هدف با پارامترهای آموزشی مناسب مقداردهی کنید:

let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)

یک مدل را با به دست آوردن یک گرادیان با توجه به ورودی و یک تابع ضرر آموزش دهید و سپس با استفاده از بهینه ساز خود مدل را در امتداد آن گرادیان به روز کنید:

optimizer.update(&model, along: gradients)

بهینه سازهای داخلی

چندین بهینه ساز رایج توسط Swift برای TensorFlow ارائه شده است. این موارد شامل موارد زیر است: