เลเยอร์

เช่นเดียวกับ 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 จัดเตรียมไว้ โดยจัดกลุ่มตามขอบเขตการใช้งาน:

การเสริม

การบิดตัว

การฝัง

สัณฐานวิทยา

การทำให้เป็นมาตรฐาน

การรวมกลุ่ม

โครงข่ายประสาทเทียมที่เกิดซ้ำ

การปรับรูปร่างใหม่

การสุ่มตัวอย่าง

เครื่องมือเพิ่มประสิทธิภาพ

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

หากต้องการใช้เครื่องมือเพิ่มประสิทธิภาพ ขั้นแรกให้เริ่มต้นสำหรับโมเดลเป้าหมายด้วยพารามิเตอร์การฝึกที่เหมาะสม:

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

ฝึกฝนโมเดลโดยรับการไล่ระดับสีที่เกี่ยวข้องกับอินพุตและฟังก์ชันการสูญเสีย จากนั้นอัปเดตโมเดลตามการไล่ระดับสีนั้นโดยใช้เครื่องมือเพิ่มประสิทธิภาพของคุณ:

optimizer.update(&model, along: gradients)

เครื่องมือเพิ่มประสิทธิภาพในตัว

Swift สำหรับ TensorFlow มีเครื่องมือเพิ่มประสิทธิภาพทั่วไปหลายอย่าง ซึ่งรวมถึงสิ่งต่อไปนี้: