เช่นเดียวกับ Tensor
เป็นส่วนประกอบพื้นฐานสำหรับการคำนวณแบบคู่ขนานแบบเร่งความเร็ว โมเดลการเรียนรู้ของเครื่องและการดำเนินการส่วนใหญ่จะแสดงในรูปแบบของโปรโตคอล Layer
Layer
กำหนดอินเทอร์เฟซสำหรับประเภทที่รับอินพุตเชิงอนุพันธ์ ประมวลผล และสร้างเอาต์พุตเชิงอนุพันธ์ Layer
สามารถมีสถานะ เช่น น้ำหนักที่ฝึกได้
Layer
เป็นการปรับแต่งโปรโตคอลของ Module
โดยที่ Module
จะกำหนดกรณีทั่วไปมากขึ้น โดยที่อินพุตของประเภทนั้นไม่จำเป็นต้องสร้างความแตกต่าง ส่วนประกอบส่วนใหญ่ในโมเดลจะจัดการกับอินพุตที่สร้างความแตกต่างได้ แต่มีกรณีที่ประเภทอาจจำเป็นต้องสอดคล้องกับ Module
แทน
หากคุณสร้างการดำเนินการโดยไม่มีพารามิเตอร์ที่สามารถฝึกได้ คุณจะต้องกำหนดการดำเนินการดังกล่าวในรูปของ ParameterlessLayer
แทนที่จะเป็น Layer
ตัวแบบมักถูกกำหนดให้เป็น Layer
s และประกอบด้วย 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 จัดเตรียมไว้ โดยจัดกลุ่มตามขอบเขตการใช้งาน:
การเสริม
การบิดตัว
- Conv.1D
- Conv2D
- Conv3D
- หนาแน่น
- Conv2D เชิงลึก
- Conv1D แบบแยกส่วนได้
- แยก Conv2D
- ย้าย Conv1D
- ย้าย Conv2D
- ย้าย Conv3D
- ZeroPadding1D
- ZeroPadding2D
- ZeroPadding3D
การฝัง
สัณฐานวิทยา
การทำให้เป็นมาตรฐาน
การรวมกลุ่ม
- ค่าเฉลี่ยพูล1D
- AvgPool2D
- AvgPool3D
- แม็กซ์พูล1ดี
- แม็กซ์พูล2ดี
- MaxPool3D
- เศษส่วนMaxPool2D
- GlobalAvgPool1D
- GlobalAvgPool2D
- GlobalAvgPool3D
- GlobalMaxPool1D
- GlobalMaxPool2D
- GlobalMaxPool3D
โครงข่ายประสาทเทียมที่เกิดซ้ำ
การปรับรูปร่างใหม่
การสุ่มตัวอย่าง
เครื่องมือเพิ่มประสิทธิภาพ
เครื่องมือเพิ่มประสิทธิภาพเป็นองค์ประกอบสำคัญของการฝึกฝนโมเดลการเรียนรู้ของเครื่อง โดยอัปเดตโมเดลตามการไล่ระดับสีที่คำนวณได้ การอัปเดตเหล่านี้จะปรับพารามิเตอร์ของแบบจำลองในลักษณะเดียวกับการฝึกโมเดล
หากต้องการใช้เครื่องมือเพิ่มประสิทธิภาพ ขั้นแรกให้เริ่มต้นสำหรับโมเดลเป้าหมายด้วยพารามิเตอร์การฝึกที่เหมาะสม:
let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)
ฝึกฝนโมเดลโดยรับการไล่ระดับสีที่เกี่ยวข้องกับอินพุตและฟังก์ชันการสูญเสีย จากนั้นอัปเดตโมเดลตามการไล่ระดับสีนั้นโดยใช้เครื่องมือเพิ่มประสิทธิภาพของคุณ:
optimizer.update(&model, along: gradients)
เครื่องมือเพิ่มประสิทธิภาพในตัว
Swift สำหรับ TensorFlow มีเครื่องมือเพิ่มประสิทธิภาพทั่วไปหลายอย่าง ซึ่งรวมถึงสิ่งต่อไปนี้: