เอาต์พุตของฟังก์ชัน model.predict จาก Keras หมายถึงอะไร


14

ฉันได้สร้างแบบจำลอง LSTM เพื่อทำนายคำถามที่ซ้ำกันในชุดข้อมูลอย่างเป็นทางการของ Quora ป้ายทดสอบเป็น 0 หรือ 1 1 หมายถึงคู่คำถามซ้ำกัน หลังจากสร้างแบบจำลองโดยใช้model.fitฉันทดสอบแบบจำลองโดยใช้model.predictกับข้อมูลการทดสอบ ผลลัพธ์คืออาร์เรย์ของค่าบางอย่างดังนี้:

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

ฉันแค่แสดง 10 ค่าแรกในอาร์เรย์ ฉันไม่เข้าใจค่าเหล่านี้หมายถึงอะไรและป้ายกำกับที่คาดการณ์ไว้สำหรับคู่คำถามแต่ละคู่คืออะไร


1
ฉันคิดว่าคุณมีปัญหาในเครือข่ายของคุณ .. น่าจะเป็นที่ควรจะเป็นในระดับ 0-1 .. แต่คุณมี 1.99 ผมคิดว่าคุณมีบางอย่างผิดปกติ ..
Ghanem

คำตอบ:


8

ผลลัพธ์ของเครือข่ายประสาทจะไม่เป็นค่าเริ่มต้นเป็นเลขฐานสองเช่นเลขศูนย์หรือตัวใดตัวหนึ่ง เครือข่ายทำงานร่วมกับค่าต่อเนื่อง (ไม่ต่อเนื่อง) เพื่อเพิ่มประสิทธิภาพการสูญเสียได้อย่างอิสระมากขึ้นในกรอบของการไล่ระดับสี

ดูคำถามที่คล้ายกันที่นี่ซึ่งยังแสดงรหัสบางส่วน

หากไม่มีการปรับแต่งและการปรับขนาดใด ๆ ผลลัพธ์ของเครือข่ายของคุณน่าจะอยู่ในช่วงของการป้อนข้อมูลของคุณในแง่ของมูลค่าเล็กน้อย ในกรณีของคุณดูเหมือนจะอยู่ระหว่าง 0 ถึง 2

ตอนนี้คุณสามารถเขียนฟังก์ชันที่เปลี่ยนค่าของคุณด้านบนเป็น 0 หรือ 1 ตามเกณฑ์บางอย่าง ตัวอย่างเช่นปรับขนาดค่าให้อยู่ในช่วง [0, 1] จากนั้นหากค่าต่ำกว่า 0.5 ให้ส่งคืน 0 หากสูงกว่า 0.5 ให้ส่งคืน 1


ขอบคุณฉันคิดถึงการใช้ค่าขีด จำกัด เพื่อจำแนกป้ายกำกับ แต่สิ่งที่ควรเป็นพื้นฐานที่ค่าเกณฑ์ตัดสินใจ?
Dookoto_Sea

@Dookoto_Sea คุณต้องตัดสินใจด้วยตัวเอง
Jérémy Blain

@Dookoto_Sea โปรดทราบว่าหากป้ายกำกับของคุณเป็น 0 หรือ 1 ค่าของคุณควรอยู่ในช่วงดังกล่าวโดยมีการคาดการณ์ค่าสเกลของ [0, 2] ที่น่าสนใจคุณจะต้องเปลี่ยนรูปแบบจำลองของคุณ
Jérémy Blain

7

หากนี่เป็นปัญหาการจัดหมวดหมู่คุณควรเปลี่ยนเครือข่ายของคุณให้มีเซลล์ประสาท 2 เอาต์พุต

คุณสามารถแปลงป้ายกำกับเป็นเวกเตอร์ที่เข้ารหัสร้อนแรงโดยใช้

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

จากนั้นตรวจสอบให้แน่ใจว่าเลเยอร์เอาต์พุตของคุณมีเซลล์ประสาทสองเซลล์ที่มีฟังก์ชั่นเปิดใช้งาน softmax

model.add(Dense(num_classes, activation='softmax'))

ซึ่งจะส่งผลให้คุณmodel.predict(x_test_reshaped)เป็นรายการ โดยที่รายการภายในคือความน่าจะเป็นของอินสแตนซ์ที่เป็นของแต่ละคลาส สิ่งนี้จะรวมกันได้มากถึง 1 และเห็นได้ชัดว่าฉลากที่ตัดสินใจควรเป็นเซลล์ประสาทขาออกที่มีความน่าจะเป็นสูงสุด

Keras มีสิ่งนี้รวมอยู่ในห้องสมุดของพวกเขาดังนั้นคุณไม่จำเป็นต้องทำการเปรียบเทียบนี้ด้วยตัวเอง model.predict_classes(x_test_reshaped)คุณจะได้รับฉลากระดับโดยตรงโดยใช้


3
"หากนี่เป็นปัญหาการจัดหมวดหมู่คุณควรเปลี่ยนเครือข่ายของคุณให้มีเซลล์ประสาท 2 เอาต์พุต" .. ขอโทษด้วย Jah แต่เขาไม่ควรทำเช่นนั้นเขาสามารถทำได้ด้วยเซลล์ประสาทเดียวและ sigmoid แทนฟังก์ชัน softmax
Ghanem

@Minion ทั้งสองวิธีมีความเทียบเท่าโดยหลักแล้วการ thresholding ที่คุณจะต้องทำกับเซลล์ประสาทขาออกเดียวจะถูกฝังอยู่ในเครือข่ายโดยปริยาย ดังนั้นการจัดเตรียมเอาต์พุตไบนารี
JahKnows

1
ใช่ฉันไปด้วย .. ฉันแสดงความคิดเห็นเพียงเพราะเขาพูดถึง: "ควรเปลี่ยนเครือข่ายของคุณให้มีเซลล์ประสาท 2 เอาต์พุต" .. thanx
Ghanem

1

การคาดการณ์จะขึ้นอยู่กับสิ่งที่คุณป้อนเป็นผลการฝึกอบรมและฟังก์ชั่นการเปิดใช้งาน

ตัวอย่างเช่นด้วย 0-1 อินพุตและฟังก์ชั่นการเปิดใช้งาน sigmoid สำหรับเอาต์พุตที่มีการสูญเสีย crossentropy แบบไบนารีคุณจะได้รับความน่าจะเป็นที่ 1 ขึ้นอยู่กับค่าใช้จ่ายในการตัดสินใจผิดไปในทิศทางใดทิศทางหนึ่ง จัดการกับความน่าจะเป็นเหล่านี้ (เช่นทำนายหมวดหมู่ "1" ถ้าความน่าจะเป็น> 0.5 หรือบางทีอาจเป็นเมื่อ> 0.1)

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

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