โครงข่ายประสาทเทียมสำหรับการส่งออกหลาย ๆ


21

ฉันมีชุดข้อมูลที่มีคอลัมน์อินพุต 34 คอลัมน์และ 8 คอลัมน์เอาต์พุต

วิธีหนึ่งในการแก้ปัญหาคือใช้อินพุต 34 ตัวและสร้างแบบจำลองการถดถอยแบบแยกเฉพาะสำหรับแต่ละคอลัมน์ผลลัพธ์

ฉันสงสัยว่าปัญหานี้สามารถแก้ไขได้โดยใช้เพียงหนึ่งโมเดลโดยเฉพาะอย่างยิ่งการใช้ Neural Network

ฉันใช้ Multilayer Perceptron แต่ต้องการโมเดลหลายแบบเช่นการถดถอยเชิงเส้น Sequence to Sequence เป็นตัวเลือกที่ทำงานได้หรือไม่?

ฉันใช้ TensorFlow ฉันมีรหัส แต่ฉันคิดว่ามันสำคัญกว่าที่จะเข้าใจสิ่งที่ฉันพลาดในแง่ของทฤษฎีพหุเพอร์ตรอนหลายชั้น

ฉันเข้าใจว่าใน MLP ถ้าคุณมีหนึ่งโหนดมันจะให้ผลลัพธ์หนึ่ง หากคุณมีโหนดเอาต์พุต 10 โหนดแสดงว่าเป็นปัญหาแบบหลายคลาส คุณเลือกคลาสที่มีความน่าจะเป็นสูงสุดจาก 10 เอาต์พุต แต่ในกรณีของฉันแน่นอนว่าจะมี 8 เอาต์พุตสำหรับอินพุตเดียวกัน

ให้บอกว่าสำหรับชุดอินพุตคุณจะได้รับพิกัด 3 มิติของบางสิ่ง (X, Y, Z) ชอบอินพุต = {1,10,5,7} เอาท์พุท = {1,2,1} ดังนั้นสำหรับอินพุตเดียวกัน {1,10,5,7} ฉันต้องสร้างแบบจำลองสำหรับค่า X ค่า Y และ Z วิธีแก้ปัญหาหนึ่งคือมี 3 รุ่นที่แตกต่างกันโดยใช้ MLP แต่ฉันอยากจะดูว่าฉันสามารถมีหนึ่งรูปแบบ ดังนั้นฉันคิดเกี่ยวกับการใช้ seq2seq เนื่องจากตัวเข้ารหัสใช้ชุดของอินพุตและตัวถอดรหัสให้ชุดเอาต์พุต แต่ดูเหมือนว่า seq2seq ใน tensorflow ไม่สามารถจัดการค่าทศนิยมได้ ฉันสามารถผิดเกี่ยวกับเรื่องนี้แม้ว่า


ดูเหมือนว่าคุณจะมีปัญหาในการทำความเข้าใจกับโมเดล NN หลายเลเยอร์ Perceptron และ TensorFlow - ข้อความของคุณเกี่ยวกับสิ่งเหล่านี้ไม่ถูกต้อง อย่างไรก็ตามยังไม่ชัดเจนว่าทำไมคุณมีความเข้าใจผิดซึ่งหมายความว่าคำตอบไม่สามารถช่วยคุณแก้ไขได้ การทำนายเช่น 8 ผลลัพธ์ของการถดถอยในแบบจำลอง NN เดียวนั้นง่ายนิดเดียวในเฟรมเวิร์ก NN ส่วนใหญ่ไม่จำเป็นต้องมีลำดับในกรณีของคุณ ดังนั้นฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องดูว่าย่อหน้าสุดท้ายของคุณมีพื้นฐานมาจากอะไรเพื่อช่วยคุณ - คุณช่วยเพิ่มรายละเอียดของสิ่งที่คุณเห็นหรือพยายามลองคิดดู
Neil Slater

เป็นไปได้หรือไม่ที่คุณจะให้คำตอบว่าจะได้ 8 ผลลัพธ์จากการถดถอยโดยใช้ตัวแบบ NN ตัวเดียวหรือไม่? ขอบคุณ
sjishan

อาจเป็นไปได้ถ้าคุณอธิบายบางสิ่งด้วยการแก้ไขคำถามของคุณ: 1) ในกรอบใด 2) รหัสของคุณคืออะไร (หรือการออกแบบถ้าคุณไม่มีรหัส)? 3) อะไรที่ทำให้คุณไม่ทำเช่นนี้ด้วยตัวคุณเอง? ฉันต้องการ 1 และ 2 เพื่อที่จะตอบกลับด้วยสิ่งที่คุณสามารถใช้ได้ ฉันต้องการ 3 เพื่อที่จะเข้าใจว่าปัญหาของคุณคืออะไรและอธิบายวิธีแก้ปัญหา
Neil Slater

1. แรงดึง 2. ฉันมีรหัส แต่ฉันคิดว่ามันสำคัญกว่าที่จะเข้าใจสิ่งที่ฉันขาดหายไปในแง่ของทฤษฎี perceptron หลายชั้น ฉันเข้าใจว่าใน MLP ถ้าคุณมีโหนดเอาท์พุทหนึ่งมันจะให้หนึ่งเอาท์พุท หากคุณมีโหนดเอาต์พุต 10 โหนดแสดงว่าเป็นปัญหาแบบหลายคลาส คุณเลือกคลาสที่มีความน่าจะเป็นสูงสุดจาก 10 เอาต์พุต แต่ในกรณีของฉันมันแน่นอนว่าจะมี 8 เอาต์พุตสำหรับอินพุตเดียวกัน ให้ฉันแสดงตัวอย่างที่แตกต่างกันสมมติว่าสำหรับชุดอินพุตคุณจะได้พิกัด 3 มิติของบางสิ่ง (X, Y, Z) ชอบอินพุต = {1,10,5,7} เอาท์พุท = {
1,2,1

ดังนั้นสำหรับอินพุตเดียวกัน {1,10,5,7} ฉันต้องสร้างแบบจำลองสำหรับค่า X ค่า Y และ Z วิธีแก้ปัญหาหนึ่งคือมี 3 รุ่นที่แตกต่างกันโดยใช้ MLP แต่ฉันอยากจะดูว่าฉันสามารถมีหนึ่งรูปแบบ ดังนั้นฉันคิดเกี่ยวกับการใช้ seq2seq เนื่องจากตัวเข้ารหัสใช้ชุดของอินพุตและตัวถอดรหัสให้ชุดเอาต์พุต แต่ดูเหมือนว่า seq2seq ใน tensorflow ไม่สามารถจัดการค่าทศนิยมได้ ฉันสามารถผิดเกี่ยวกับเรื่องนี้แม้ว่า
sjishan

คำตอบ:


14

สิ่งที่คุณอธิบายคือการถดถอยเชิงเส้นหลายมิติปกติ โดยปกติปัญหาประเภทนี้จะได้รับการแก้ไขด้วยเครือข่าย feedforward ไม่ว่าจะเป็น MLP หรือสถาปัตยกรรมอื่น ๆ ที่เหมาะสมกับลักษณะของปัญหา

กรอบโครงข่ายใยประสาทเทียมใด ๆ สามารถทำสิ่งนั้นได้

กุญแจสำคัญในการทำเช่นนั้นคือการจำไว้ว่าเลเยอร์สุดท้ายควรมีการเปิดใช้งานเชิงเส้น (เช่นไม่มีการเปิดใช้งานเลย)

ตามความต้องการของคุณรูปร่างของเลเยอร์อินพุตจะเป็นเวกเตอร์ (34,) และเอาต์พุต (8,)

อัปเดต: ฟังก์ชั่นการสูญเสียตามปกติที่ใช้สำหรับปัญหาการถดถอยหมายถึงข้อผิดพลาดกำลังสอง (MSE) นี่คือตัวอย่างของการถดถอยหลายมิติโดยใช้Keras ; เครือข่ายไม่ใช่ MLP แต่ควรโอเคเพื่อแสดงแนวคิด


1
อาจมีมูลค่าเพิ่มบรรทัดเกี่ยวกับฟังก์ชั่นค่าใช้จ่ายปกติสำหรับการถดถอย (หมายถึงข้อผิดพลาดของสแควร์) และชี้ไปที่ตัวอย่างการถดถอยของ TensorFlow ถึงแม้ว่าฉันเพิ่งใช้เวลา 10 นาทีในการค้นหาและไม่เห็นอะไรเลย . . (ตัวอย่างข้ามจากการถดถอยเชิงเส้นไปยังตัวจำแนกประเภท MNIST แต่ไม่มีตัวแบบการถดถอย MLP พื้นฐาน)
Neil Slater

3

คุณสามารถใช้สิ่งนี้ได้ง่ายๆใน Python
X ของคุณคือชุดของการฝึกอบรม x, y, z พิกัด
Y ของคุณคือชุดของการทดสอบพิกัด x, y, z

from sklearn import cross_validation                     
from sklearn.neural_network import MLPRegressor   

model = MLPRegressor(solver='lbfgs',alpha=0.001,hidden_layer_sizes=(150,))
cross_validation.cross_val_score(model, X, Y,scoring='mean_squared_error')

0

นี่ง่ายกว่าที่คุณคิด - คุณสามารถตั้งค่าเลเยอร์เอาท์พุทเป็นเวกเตอร์แทนที่จะเป็นสเกลาร์เดียว แน่นอนว่าไม่มีเวทมนต์อยู่ที่นี่และฉันขอแนะนำให้คุณเตรียมข้อมูลของคุณ (ดำเนินการแบทช์ให้เป็นมาตรฐานดังนั้นเอาต์พุตทั้งหมดจะเป็นค่าระหว่าง 0 ถึง 1)

หากคุณใช้ Keras วิธีการทำเช่นนี้คือการเพิ่มเลเยอร์หนาแน่นเป็นเลเยอร์ผลลัพธ์สุดท้าย: model.add(Dense(8, activation='linear'))

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