Swift for TensorFlow เป็นการทดลองในแพลตฟอร์มรุ่นต่อไปสำหรับการเรียนรู้ของเครื่องซึ่งรวมเอาการวิจัยล่าสุดเกี่ยวกับการเรียนรู้ของเครื่องคอมไพเลอร์การเขียนโปรแกรมที่แตกต่างกันการออกแบบระบบและอื่น ๆ ถูกเก็บถาวรในเดือนกุมภาพันธ์ 2021 ความสำเร็จที่สำคัญบางอย่างจากโครงการนี้ ได้แก่ :
- เพิ่ม การเขียนโปรแกรมที่แตกต่าง ของภาษาในภาษา Swift งานนี้ยังคงดำเนินต่อไปในคอมไพเลอร์ Swift อย่างเป็นทางการ
- พัฒนา API การเรียนรู้ เชิง ลึกที่ มุ่งเน้นความหมายและความหมายที่ผันแปรได้
- ส่งเสริมการพัฒนา สวนจำลองที่ มีมากกว่า 30 แบบจากสาขาวิชาที่มีการเรียนรู้เชิงลึกที่หลากหลาย
- เปิดใช้งานการวิจัยใหม่ที่ ผสมผสานการเรียนรู้เชิงลึกกับแบบจำลองกราฟิกที่น่าจะเป็น สำหรับการติดตามการเคลื่อนไหว 3 มิติและอื่น ๆ
- ขับเคลื่อนต้นแบบ pure-Swift (เกือบ) ของ รันไทม์ GPU + CPU ที่รองรับ pmap
- แยกความพยายามด้านโอเพนซอร์สหลายรายการซึ่งยังคงอยู่ระหว่างการพัฒนาอย่างต่อเนื่อง:
- PythonKit : การทำงานร่วมกันของ Python กับ Swift
- swift-jupyter : เปิดใช้งาน Swift ภายในสมุดบันทึก Jupyter
- การเปรียบเทียบที่รวดเร็ว : ให้ชุดการเปรียบเทียบที่แข็งแกร่งสำหรับรหัส Swift
- แยกความพยายามอื่น ๆ ของโอเพ่นซอร์ส:
- เพนกวิน : การเขียนโปรแกรมแบบขนานโครงสร้างข้อมูลอัลกอริทึมกราฟและอื่น ๆ
- Tensors Fitting อย่างสมบูรณ์แบบ : การวิเคราะห์แบบคงที่ของรูปร่างที่ไม่ตรงกันของเทนเซอร์
- ข้อเสนอวิวัฒนาการอย่างรวดเร็วที่เสนอและนำไปใช้:
ไซต์นี้จะไม่ได้รับการอัปเดตเพิ่มเติม เอกสาร 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!