เครือข่ายเซลล์ประสาทเทียม (ANN) ที่มีอินพุตและเอาต์พุตจำนวนเท่าใดก็ได้


10

ฉันต้องการใช้ ANN สำหรับปัญหาของฉัน แต่ปัญหาคืออินพุตและเอาต์พุตหมายเลขโหนดของฉันไม่ได้รับการแก้ไข

ฉันทำการค้นหาด้วยกูเกิลก่อนถามคำถามของฉันและพบว่า RNN อาจช่วยฉันแก้ปัญหาได้ แต่ตัวอย่างทั้งหมดที่ฉันได้พบมีจำนวนกำหนดโหนดเข้าและออก

ดังนั้นฉันกำลังมองหากลยุทธ์วิธีทำให้เป็นจริงหรืออย่างน้อยตัวอย่างเป็นที่นิยมใน Keras หรือ PyTorch

รายละเอียดเพิ่มเติมเกี่ยวกับปัญหาของฉัน:

ฉันมีสองรายการอินพุตซึ่งความยาวของรายการแรกได้รับการแก้ไขและเท่ากับสอง fe:

in_1 = [2,2] 

แต่ความยาวของรายการที่สองมีความยืดหยุ่นความยาวได้จากสามถึง inf, fe:

in_2 = [1,1,2,2]

หรือ

in_2 = [1,1,1,2,2,2,3,3,3]

นอกจากนี้รายการอินพุตยังต้องพึ่งพาซึ่งกันและกัน รายการแรกแสดงมิติของรายการเอาท์พุท ดังนั้นถ้า in_1 = [2,2] หมายถึงผลลัพธ์ที่จะต้องมีความเป็นไปได้ที่จะก่อร่างใหม่ในรูปแบบ [2,2]

ขณะนี้ฉันกำลังคิดที่จะรวมสองรายการอินพุตเป็นหนึ่ง:

in = in_1 + in_2 = [2, 2, 1, 1, 2, 2]

นอกจากนี้เอาต์พุตมีความยาวเท่ากับรายการin_2 , fi:

หากรายการอินพุตคือ:

in_1 = [2, 2]
in_2 = [1, 1, 2, 2]

ผลลัพธ์ควรเป็น:

out = [1, 2, 1, 2]

ความคิดใด ๆ ยินดีต้อนรับ!

คำตอบ:


6

คำตอบอาจขึ้นอยู่กับความสำคัญของความยาวของเวกเตอร์อินพุตหรือวิธีกำเนิด

อย่างไรก็ตามวิธีแก้ปัญหาที่ง่ายที่สุดมักจะรู้ขนาดที่ใหญ่ที่สุดและใช้เป็นจำนวนเวกเตอร์ หากอินพุตที่กำหนดมีความยาวน้อยกว่าคุณสามารถทำช่องว่างภายในด้วยศูนย์หรือสัญลักษณ์ที่เหมาะสม ดังนั้นแทนที่จะมีเวกเตอร์ [1, 2, 3] และ [1, 2, 2, 3] คุณสามารถมีเวกเตอร์ [1, 2, 3, 0] และ [1, 2, 2, 3]

เช่นเดียวกันสามารถนำไปใช้สำหรับการส่งออก หากคาดว่าเอาต์พุตคือ [1, 2, 1] และ [1, 3, 4, 1] คุณสามารถใช้เอาต์พุตแรกเป็น [1, 2, 1, 0]

นี่ไม่ใช่แค่แฮ็คหรือ

โดยทั่วไปโครงข่ายประสาทเทียมจะทำหน้าที่ประมาณ โดยอุดมคติแล้วมันหมายถึงเวกเตอร์ (เมทริกซ์) เป็นอินพุตและเวกเตอร์ (เมทริกซ์) เป็นเอาต์พุต นี่คือเหตุผลที่เป็นที่พึงประสงค์เสมอที่ขนาดของเวกเตอร์อินพุตของคุณจะได้รับการแก้ไข


ตกลงที่ชัดเจนฉันสามารถทำช่องว่างภายในสำหรับการป้อนข้อมูล แต่จะกำหนดขนาดของโหนดเอาต์พุตได้อย่างไร?
ข้าวเปลือก

3

ฉันคิดว่าคุณอาจเข้าใจผิดเกี่ยวกับจำนวนอินพุตที่คงที่สำหรับ RNN นี่คือจำนวนของปัจจัยการผลิตต่อ timestep ตัวอย่างทั้งหมดของคุณมีจำนวนอินพุตที่แน่นอนต่อการประทับเวลา: 1! คุณป้อนพวกเขาทีละครั้งในเครือข่ายประสาทของคุณด้วยโทเค็น "สิ้นสุด" พิเศษ (คุณสามารถป้อนข้อมูลที่สองสำหรับสิ่งนี้ได้เสมอ) สอนให้ไม่ให้เอาต์พุตจนกว่าจะเห็นโทเค็นสุดท้ายจากนั้นจึงส่งออกส่วนประกอบของผลลัพธ์ทีละครั้งโดยลงท้ายด้วยโทเค็นเอาต์พุตพิเศษพิเศษ


ว้าวขอบคุณ! คุณรู้หรือตัวอย่างการสอนที่ดีพอที่จะเข้าใจหรือไม่?
ข้าวเปลือก

1
@Paddy ดูAwesome- rnn สำหรับบางลิงค์เช่นchar-rnnนั้นสนุกมาก
Arthur Tacca

2

การรู้ว่ารายการแรกนั้นค่อนข้างคงที่ (เพียงอธิบายเรขาคณิตบางอย่าง) คุณสามารถลองสร้าง NN พิเศษหลายแบบที่แตกต่างกันสำหรับการกำหนดค่าin_1ทุกแบบที่แตกต่างกันและใช้in_2เพียงอย่างเดียวในการป้อนเครือข่าย

ดังนั้นin_1สามารถขับเคลื่อนเครือข่ายที่แตกต่างกันได้

in_1=[1,1]? --> NN #1 (n1) --> (o1)
in_1=[2,1]? --> NN #2 (n1,n2) --> (o1,o2)
in_1=[2,2]? --> NN #3 (n1,n2,n3,n4) -> (o1,o2,o3,o4)

ในขั้นตอนแรกคุณจะพิจารณาการกำหนดค่า (เช่นการสร้าง dict) จากนั้นฝึกอบรม / ฟีดเครือข่ายพิเศษตามลำดับ


จริง ๆ แล้วมันเป็นความคิดที่ดี แต่จำนวนรูปร่างค่อนข้างใหญ่ ... อย่างไรก็ตามขอขอบคุณสำหรับการป้อนข้อมูล!
ข้าวเปลือก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.