Swift cho TensorFlow (Ở chế độ lưu trữ)

Swift cho TensorFlow là một thử nghiệm trong nền tảng máy học thế hệ tiếp theo, kết hợp nghiên cứu mới nhất về máy học, trình biên dịch, lập trình khác biệt, thiết kế hệ thống, v.v. Nó được lưu trữ vào tháng 2 năm 2021. Một số thành tựu đáng kể từ dự án này bao gồm:

Trang web này sẽ không nhận được thông tin cập nhật thêm. Tài liệu API và các bản tải xuống nhị phân sẽ tiếp tục có thể truy cập được cũng như các bản ghi cuộc họp Đánh giá Thiết kế Mở .

Nhanh

Swift là ngôn ngữ lập trình đa năng nguồn mở , có lượng người dùng lớn và ngày càng tăng. Chúng tôi chọn Swift vì nó có quy trình thiết kế ngôn ngữ mở và vì các lý do kỹ thuật cụ thể được nêu chi tiết trong tài liệu " Tại sao lại dùng Swift cho TensorFlow ". Chúng tôi cho rằng hầu hết độc giả đều chưa quen với nó, vì vậy chúng tôi sẽ đề cập ngắn gọn về một số điều quan trọng bổ sung về nó ở đây.

Sự phát triển của Swift bắt đầu vào năm 2010 và nhằm mục đích tập hợp những phương pháp hay nhất trong thiết kế ngôn ngữ lập trình vào một hệ thống thay vì cố gắng tìm kiếm sự mới lạ về mặt học thuật hoặc truyền bá các phương pháp lập trình mang tính tôn giáo. Kết quả là, nó hỗ trợ phát triển đa mô hình (ví dụ: chức năng, OOP, chung, thủ tục, v.v.) trong một hệ thống và mang đến nhiều khái niệm nổi tiếng từ các ngôn ngữ học thuật (ví dụ: khớp mẫu , kiểu dữ liệu đại số và lớp kiểu) vào hàng đầu. Thay vì khuyến khích mạnh mẽ các nhà phát triển viết lại tất cả mã của họ trong Swift, nó thực tế tập trung vào khả năng tương tác với các ngôn ngữ khác, ví dụ: cho phép bạn nhập trực tiếp các tệp tiêu đề C và sử dụng chúng mà không cần FFI và (bây giờ) khả năng sử dụng API Python mà không cần trình bao bọc .

Swift có mục tiêu táo bạo là mở rộng từ lập trình hệ thống cấp thấp đến lập trình kịch bản cấp cao, tập trung vào việc dễ học và sử dụng . Bởi vì Swift cần phải dễ học và sử dụng nhưng cũng phải mạnh mẽ nên nó dựa trên nguyên tắc tiết lộ dần dần về độ phức tạp , điều này quyết định tính chi phí của sự phức tạp lên những người được hưởng lợi từ sự phức tạp đó. "Cảm giác ngôn ngữ kịch bản" kết hợp với hiệu suất cao rất hữu ích cho việc học máy.

Khía cạnh thích hợp cuối cùng trong thiết kế của Swift là phần lớn ngôn ngữ Swift thực sự được triển khai trong thư viện tiêu chuẩn của nó. Các kiểu "được xây dựng sẵn" như IntBool thực ra chỉ là các cấu trúc được xác định trong thư viện tiêu chuẩn bao bọc các kiểu và phép toán ma thuật. Vì vậy, đôi khi chúng tôi nói đùa rằng Swift chỉ là "cú pháp đường cho LLVM".

Còn rất nhiều điều thú vị về Swift và rất nhiều nội dung có sẵn trực tuyến. Nếu bạn muốn tìm hiểu thêm về các khái niệm lập trình Swift chung, đây là một số liên kết để bắt đầu:

Một cảnh báo: Swift phát triển nhanh chóng trong những năm đầu, vì vậy bạn nên cẩn thận với mọi thứ trước Swift 3 (phát hành năm 2016).

Tại sao Swift lại dùng TensorFlow?

Swift cho TensorFlow là một cách mới để phát triển các mô hình học máy. Nó mang đến cho bạn sức mạnh của TensorFlow được tích hợp trực tiếp vào ngôn ngữ lập trình Swift . Chúng tôi tin rằng các mô hình học máy quan trọng đến mức chúng xứng đáng được hỗ trợ về trình biên dịch và ngôn ngữ hạng nhất .

Một nguyên tắc cơ bản trong học máy là tối ưu hóa dựa trên độ dốc: các đạo hàm tính toán để tối ưu hóa các tham số. Với Swift cho TensorFlow, bạn có thể dễ dàng phân biệt các hàm bằng cách sử dụng các toán tử vi phân như gradient(of:) hoặc phân biệt theo toàn bộ mô hình bằng cách gọi phương thức gradient(in:) . Các API phân biệt này không chỉ có sẵn cho các khái niệm liên quan đến Tensor mà còn được khái quát hóa cho tất cả các loại tuân theo giao thức Differentiable , bao gồm vectơ Float , Double , SIMD và cấu trúc dữ liệu của riêng bạn.

// 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

Ngoài các công cụ phái sinh, dự án Swift for TensorFlow còn đi kèm với một chuỗi công cụ phức tạp để giúp người dùng làm việc hiệu quả hơn. Bạn có thể chạy Swift một cách tương tác trong sổ ghi chép Jupyter và nhận các đề xuất tự động hoàn thành hữu ích để giúp bạn khám phá bề mặt API khổng lồ của thư viện deep learning hiện đại. Bạn có thể bắt đầu ngay trong trình duyệt của mình sau vài giây !

Việc di chuyển sang Swift cho TensorFlow thực sự dễ dàng nhờ tích hợp Python mạnh mẽ của Swift. Bạn có thể di chuyển dần dần mã Python của mình (hoặc tiếp tục sử dụng các thư viện Python yêu thích của mình), vì bạn có thể dễ dàng gọi thư viện Python yêu thích của mình bằng cú pháp quen thuộc:

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!