Google I/O สำเร็จแล้ว! ติดตามเซสชัน TensorFlow ดูเซสชัน

รวดเร็วสำหรับ TensorFlow (ในโหมดเก็บถาวร)

Swift for TensorFlow เป็นการทดลองในแพลตฟอร์มรุ่นต่อไปสำหรับการเรียนรู้ของเครื่องซึ่งรวมเอาการวิจัยล่าสุดเกี่ยวกับการเรียนรู้ของเครื่องคอมไพเลอร์การเขียนโปรแกรมที่แตกต่างกันการออกแบบระบบและอื่น ๆ ถูกเก็บถาวรในเดือนกุมภาพันธ์ 2021 ความสำเร็จที่สำคัญบางอย่างจากโครงการนี้ ได้แก่ :

ไซต์นี้จะไม่ได้รับการอัปเดตเพิ่มเติม เอกสาร API และการดาวน์โหลดไบนารีจะยังคงสามารถเข้าถึงได้เช่นเดียวกับการ บันทึกการประชุม Open Design Review

รวดเร็ว

Swift เป็นภาษาโปรแกรมสำหรับวัตถุประสงค์ทั่วไปแบบ โอเพนซอร์ส ซึ่งมีฐานผู้ใช้จำนวนมากและเพิ่มขึ้นเรื่อย ๆ เราเลือก Swift เนื่องจากมี กระบวนการออกแบบภาษาที่เปิดกว้าง และด้วยเหตุผลทางเทคนิคที่เฉพาะเจาะจงซึ่งมีรายละเอียดอยู่ในเอกสาร " Why Swift for TensorFlow " เราคิดว่าผู้อ่านส่วนใหญ่ไม่คุ้นเคยกับมันดังนั้นเราจะพูดสั้น ๆ เกี่ยวกับสิ่งที่สำคัญเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่

การพัฒนา Swift เริ่มต้นในปี 2010 และมุ่งหวังที่จะนำแนวทางปฏิบัติที่ดีที่สุดในการออกแบบภาษาโปรแกรมมารวมกันเป็นระบบเดียวแทนที่จะพยายามหาสิ่งแปลกใหม่ทางวิชาการหรือเพื่อเผยแพร่วิธีการเขียนโปรแกรมตามหลักศาสนา ด้วยเหตุนี้จึงสนับสนุนการพัฒนาหลายกระบวนทัศน์ (เช่นฟังก์ชัน OOP ทั่วไปขั้นตอน ฯลฯ ) ทั้งหมดในระบบเดียวและนำแนวคิดที่เป็นที่รู้จักมากมายจากภาษาวิชาการ (เช่นการ จับคู่รูปแบบ ประเภทข้อมูลพีชคณิต และคลาสประเภท) ไปอยู่แถวหน้า แทนที่จะสนับสนุนให้นักพัฒนาเขียนโค้ดใหม่ทั้งหมดใน Swift แต่ในทางปฏิบัติมุ่งเน้นไปที่ความสามารถในการทำงานร่วมกันกับภาษาอื่น ๆ เช่นช่วยให้คุณสามารถนำเข้าไฟล์ส่วนหัว C ได้โดยตรงและใช้งานได้โดยไม่ต้องใช้ FFI และ (ตอนนี้) ความสามารถในการใช้ Python API โดยไม่ต้องห่อหุ้ม .

Swift มีเป้าหมายที่ชัดเจนในการครอบคลุมตั้งแต่การเขียนโปรแกรมระบบระดับต่ำไปจนถึงการเขียนสคริปต์ระดับสูงโดยมุ่งเน้นที่การ เรียนรู้และใช้งานได้ง่าย เนื่องจาก Swift จำเป็นต้องเรียนรู้และใช้งานได้ง่าย แต่ก็มีประสิทธิภาพด้วยจึงอาศัยหลักการของ การเปิดเผยความซับซ้อนแบบก้าวหน้า ซึ่งจะส่งผลต่อต้นทุนของความซับซ้อนไปสู่ผู้ที่ได้รับประโยชน์จากความซับซ้อนนั้นอย่างจริงจัง "ความรู้สึกของภาษาสคริปต์" รวมกับประสิทธิภาพสูงเป็นประโยชน์อย่างมากสำหรับการเรียนรู้ของเครื่อง

แง่มุมสุดท้ายที่เกี่ยวข้องของการออกแบบ Swift คือภาษา Swift ส่วนใหญ่ถูกนำไปใช้จริงในไลบรารีมาตรฐาน ประเภท "Builtin" เช่น Int และ Bool เป็นเพียงโครงสร้างที่กำหนดไว้ในไลบรารีมาตรฐานที่รวมประเภทและการทำงานของเวทมนตร์ ด้วยเหตุนี้บางครั้งเราก็พูดติดตลกว่า Swift เป็นเพียง "syntactic sugar for LLVM"

มีอะไรอีกมากมายที่เจ๋งเกี่ยวกับ Swift และเนื้อหามากมายทางออนไลน์ หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดการเขียนโปรแกรม Swift ทั่วไปต่อไปนี้เป็นลิงก์บางส่วนสำหรับเริ่มต้น:

  • Swift Tour เป็นทัวร์ชมไวยากรณ์ระดับสูงและความรู้สึกของ Swift แบบข้ามได้และเป็นส่วนหนึ่งของหนังสือ "The Swift Programming Language" ที่มีขนาดใหญ่กว่า
  • ความหมายเชิงคุณค่ามีประสิทธิภาพและมีบทบาทสำคัญใน Swift code ดังที่อธิบายไว้ใน " Building Better Apps with Value types in Swift " [ YouTube ]
  • Swift รองรับ OOP แบบคลาสสิก แต่ได้ดัดแปลงแนวคิดจากระบบประเภท Haskell คำอธิบายนี้มีคำอธิบายใน " Protocol-Oriented Programming in Swift " [ YouTube ]

คำเตือนอย่างหนึ่ง: Swift มีการพัฒนาอย่างรวดเร็วในช่วงปีแรก ๆ ดังนั้นคุณควรระวังอะไรก่อน Swift 3 (เปิดตัวในปี 2016)

ทำไมต้อง Swift สำหรับ TensorFlow

Swift for TensorFlow เป็นวิธีใหม่ในการพัฒนาโมเดลแมชชีนเลิร์นนิง ช่วยให้คุณมีพลังของ TensorFlow ที่ รวมเข้ากับ ภาษาโปรแกรม Swift โดยตรง เราเชื่อว่ากระบวนทัศน์การเรียนรู้ของเครื่องมีความสำคัญมากจนสมควรได้รับ การสนับสนุนภาษาและคอมไพเลอร์ชั้น หนึ่ง

พื้นฐานพื้นฐานในการเรียนรู้ของเครื่องคือการเพิ่มประสิทธิภาพตามการไล่ระดับสี: อนุพันธ์ของฟังก์ชันการคำนวณเพื่อปรับพารามิเตอร์ให้เหมาะสม ด้วย Swift สำหรับ TensorFlow คุณสามารถแยกความแตกต่างของฟังก์ชันได้อย่างง่ายดายโดยใช้ตัวดำเนินการที่แตกต่างกันเช่นการ gradient(of:) หรือแยกความแตกต่างตามรูปแบบทั้งหมดโดยการเรียกวิธีการ gradient(in:) API การสร้างความแตกต่างเหล่านี้ไม่ได้มีไว้สำหรับแนวคิดที่เกี่ยวข้องกับ Tensor แต่เป็นข้อมูลทั่วไปสำหรับทุกประเภทที่เป็นไปตามโปรโตคอลที่ Differentiable ซึ่งรวมถึง Float , Double , SIMD vectors และโครงสร้างข้อมูลของคุณ

// 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 ยังมาพร้อมกับ toolchain ที่ซับซ้อนเพื่อให้ผู้ใช้มีประสิทธิผลมากขึ้น คุณสามารถเรียกใช้ Swift แบบโต้ตอบในสมุดบันทึก Jupyter และรับคำแนะนำในการเติมข้อความอัตโนมัติที่เป็นประโยชน์เพื่อช่วยคุณสำรวจพื้นผิว API ขนาดใหญ่ของไลบรารีการเรียนรู้เชิงลึกที่ทันสมัย คุณสามารถ เริ่มต้นได้ทันทีในเบราว์เซอร์ของคุณในไม่กี่วินาที !

การโยกย้ายไปยัง Swift สำหรับ TensorFlow นั้นง่ายมากด้วยการผสานรวม Python อันทรงพลังของ Swift คุณสามารถย้ายรหัส Python ของคุณไปทีละขั้น ๆ ได้ (หรือใช้ไลบรารี Python ที่คุณชื่นชอบต่อไป) เพราะคุณสามารถเรียกไลบรารี 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!