Lớp

Giống như Tensor là khối xây dựng cơ bản của chúng tôi để tính toán song song được tăng tốc, hầu hết các mô hình và hoạt động học máy sẽ được thể hiện dưới dạng giao thức Layer . Layer xác định giao diện cho các loại lấy đầu vào có thể phân biệt, xử lý nó và tạo ra đầu ra có thể phân biệt. Một Layer có thể chứa trạng thái, chẳng hạn như các trọng số có thể huấn luyện được.

Layer là sự cải tiến của giao thức Module , trong đó Module xác định trường hợp tổng quát hơn trong đó đầu vào của loại không nhất thiết phải khác biệt. Hầu hết các thành phần trong một mô hình sẽ xử lý các đầu vào có thể khác biệt, nhưng thay vào đó, có những trường hợp các loại có thể cần phải tuân theo Module .

Nếu bạn tạo một thao tác không có tham số có thể huấn luyện bên trong nó, bạn sẽ muốn xác định nó theo ParameterlessLayer thay vì Layer .

Bản thân các mô hình thường được định nghĩa là Layer s và thường bao gồm Layer s khác. Một mô hình hoặc đơn vị con đã được xác định là Layer có thể được xử lý giống như bất kỳ Layer nào khác, cho phép xây dựng các mô hình phức tạp tùy ý từ các mô hình hoặc đơn vị con khác.

Để xác định Layer tùy chỉnh cho mô hình hoặc hoạt động của riêng bạn, bạn thường sẽ làm theo mẫu tương tự như sau:

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 ...
  }
}

Các thành phần có thể huấn luyện của Layers , chẳng hạn như trọng số và độ lệch, cũng như Layer khác, có thể được khai báo là thuộc tính. Trình khởi tạo tùy chỉnh là nơi tốt để hiển thị các tham số có thể tùy chỉnh cho một mô hình, chẳng hạn như số lượng lớp thay đổi hoặc kích thước đầu ra của mô hình phân loại. Cuối cùng, cốt lõi của LayercallAsFunction() , trong đó bạn sẽ xác định các loại cho đầu vào và đầu ra cũng như phép biến đổi lấy một cái và trả về cái kia.

Các lớp tích hợp

Nhiều hoạt động học máy phổ biến đã được gói gọn dưới dạng Layer để bạn sử dụng khi xác định mô hình hoặc đơn vị con. Sau đây là danh sách các lớp do Swift cung cấp cho TensorFlow, được nhóm theo các khu vực chức năng:

Tăng cường

tích chập

Nhúng

hình thái học

Chuẩn hóa

Tổng hợp

Mạng lưới thần kinh tái phát

Định hình lại

Lấy mẫu lại

Trình tối ưu hóa

Trình tối ưu hóa là thành phần chính trong quá trình đào tạo mô hình học máy, cập nhật mô hình dựa trên độ dốc được tính toán. Lý tưởng nhất là những cập nhật này sẽ điều chỉnh các tham số của mô hình theo cách huấn luyện mô hình.

Để sử dụng trình tối ưu hóa, trước tiên hãy khởi tạo nó cho mô hình đích với các tham số huấn luyện phù hợp:

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

Huấn luyện mô hình bằng cách lấy một gradient liên quan đến đầu vào và hàm mất mát, sau đó cập nhật mô hình dọc theo gradient đó bằng trình tối ưu hóa của bạn:

optimizer.update(&model, along: gradients)

Trình tối ưu hóa tích hợp

Một số trình tối ưu hóa phổ biến được Swift cung cấp cho TensorFlow. Chúng bao gồm những điều sau đây: