โปรเจ็กต์นี้สร้าง Recurrent Neural Network (RNN) สำหรับการสร้างเพลง แบบจำลองนี้ได้รับการฝึกฝนให้เรียนรู้รูปแบบของโน้ตเพลงดิบในรูปแบบ ABC ซึ่งสร้างดนตรี ชุดข้อมูลรวบรวมจาก kaggle และมีสัญลักษณ์เพลง ABC ลิงก์: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile ข้อความในชุดข้อมูลจะถูกสร้างเป็นเวกเตอร์ก่อนเพื่อสร้างการแสดงตัวเลขเพื่อรักษาตารางการค้นหา เราจะใช้ลำดับตัวอย่างสำหรับการฝึก RNN ด้วยความยาวลำดับที่แน่นอน นอกจากนี้ยังมีลำดับเป้าหมายสำหรับการทำนายตัวละครตัวถัดไป สิ่งนี้จะถูกนำไปใช้โดยใช้วิธีแบทช์ซึ่งจะแปลงกระแสดัชนีอักขระนี้เป็นลำดับตามขนาดที่ต้องการ โมเดล RNN ที่เราสร้างจะขึ้นอยู่กับสถาปัตยกรรม LSTM และมีตัวเริ่มต้น "glorot_uniform" และฟังก์ชันการเปิดใช้งาน "sigmoid" ซึ่งเราจะใช้เวกเตอร์สถานะเพื่อรักษาข้อมูลเกี่ยวกับความสัมพันธ์ชั่วคราวระหว่างอักขระที่ต่อเนื่องกัน จากนั้นเอาต์พุตสุดท้ายของ LSTM จะถูกป้อนเข้าไปในเลเยอร์ Dense ที่เชื่อมต่อโดยสมบูรณ์ โดยที่เราจะส่งออกค่า softmax บนอักขระแต่ละตัวในคำศัพท์ จากนั้นจึงสุ่มตัวอย่างจากการแจกแจงนี้เพื่อทำนายอักขระตัวถัดไป
เลเยอร์ 1: การฝังเลเยอร์เพื่อแปลงดัชนีให้เป็นเวกเตอร์หนาแน่นที่มีขนาดการฝังคงที่
เลเยอร์ 2: LSTM พร้อมจำนวนหน่วย rnn_units
เลเยอร์ 3: เลเยอร์หนาแน่น (เชื่อมต่ออย่างสมบูรณ์) ที่แปลงเอาต์พุต LSTM ให้เป็นขนาดคำศัพท์
จากนั้น แบบจำลอง RNN จะได้รับการฝึกโดยใช้รูปแบบของการสูญเสียข้ามเอนโทรปี (การสูญเสียโอกาสบันทึกเชิงลบ) เช่น การสูญเสียแบบเบาบาง เนื่องจากใช้เป้าหมายจำนวนเต็มสำหรับงานการจำแนกประเภทตามหมวดหมู่ เราต้องการคำนวณการสูญเสียโดยใช้เป้าหมายที่แท้จริง - ป้ายกำกับ - และเป้าหมายที่คาดการณ์ - บันทึก ไฮเปอร์พารามิเตอร์ถูกกำหนดไว้สำหรับการตั้งค่าและการเพิ่มประสิทธิภาพ Adam Optimizer ใช้เป็นตัวเพิ่มประสิทธิภาพสำหรับการดำเนินการฝึกอบรม โมเดลนี้ได้รับการฝึกฝนสำหรับการวนซ้ำ 3,000 ครั้ง โดยมีขนาดแบทช์ 10 และความยาวลำดับ 100 โมเดลจะเรียนรู้ได้ดีขึ้นเมื่อตั้งค่าอัตราการเรียนรู้เป็น 1e-3 ในการสร้างเพลง โมเดลจะทำตามขั้นตอนการทำนาย:
ขั้นตอนที่ 1: เริ่มต้นสตริงเริ่มต้น "seed" และสถานะ RNN และกำหนดจำนวนอักขระที่เราต้องการสร้าง
ขั้นตอนที่ 2: ใช้สตริงเริ่มต้นและสถานะ RNN เพื่อรับการแจกแจงความน่าจะเป็นสำหรับอักขระที่คาดการณ์ถัดไป
ขั้นตอนที่ 3: ตัวอย่างจากการแจกแจงพหุนามเพื่อคำนวณดัชนีของอักขระที่ทำนาย จากนั้นอักขระที่คาดการณ์ไว้นี้จะถูกใช้เป็นอินพุตถัดไปของโมเดล
ขั้นตอนที่ 4: ในแต่ละขั้นตอน สถานะ RNN ที่อัปเดตจะถูกป้อนกลับเข้าไปในโมเดล เพื่อให้ตอนนี้มีบริบทมากขึ้นในการคาดการณ์ครั้งต่อไป หลังจากคาดการณ์อักขระตัวถัดไป สถานะ RNN ที่อัปเดตจะถูกป้อนกลับเข้าไปในโมเดลอีกครั้ง ซึ่งเป็นวิธีที่โมเดลเรียนรู้การขึ้นต่อกันของลำดับในข้อมูล เนื่องจากได้รับข้อมูลเพิ่มเติมจากการคาดการณ์ครั้งก่อน
ตอนนี้ โมเดลจะสร้างเพลงโดยผู้ใช้กำหนด "start_string" และ "generation_length"