วิธีรับการทำนายด้วย predict_generator จากข้อมูลการทดสอบการสตรีมใน Keras


16

ในบล็อก Keras เกี่ยวกับการฝึกอบรมทำให้มั่นใจตั้งแต่เริ่มต้นรหัสจะแสดงเฉพาะเครือข่ายที่ทำงานกับข้อมูลการฝึกอบรมและการตรวจสอบความถูกต้อง แล้วข้อมูลทดสอบล่ะ ข้อมูลการตรวจสอบเป็นเช่นเดียวกับข้อมูลทดสอบ (ฉันคิดว่าไม่) หากมีโฟลเดอร์ทดสอบแยกต่างหากในบรรทัดที่คล้ายกันเป็นโฟลเดอร์รถไฟและการตรวจสอบความถูกต้องเราจะได้รับเมทริกซ์ความสับสนสำหรับข้อมูลการทดสอบอย่างไร ฉันรู้ว่าเราต้องใช้ scikit learn หรือชุดอื่น ๆ เพื่อทำสิ่งนี้ แต่ฉันจะทำบางสิ่งให้สอดคล้องกับความน่าจะเป็นที่ชาญฉลาดของชั้นเรียนสำหรับข้อมูลการทดสอบ ฉันหวังว่าจะใช้สิ่งนี้กับเมทริกซ์ความสับสน


1
คุณสามารถเรียกใช้ model.predict_generator (... ) ฟังก์ชั่นที่มีเครื่องกำเนิดไฟฟ้าที่อ่านข้อมูลจากไดเรกทอรีที่มีชุดทดสอบ มันส่งกลับการคาดการณ์ซึ่งคุณสามารถใช้ในการคำนวณเมทริกซ์ความสับสน นั่นคือสิ่งที่คุณกำลังมองหา? ดูที่นี่สำหรับเอกสาร: keras.io/models/sequential
stmax

1
ใช่ฉันเห็นแล้ว guess_generator ส่งคืนรายการการทำนายซึ่งเป็นรายการค่าลอยตัวระหว่าง 0 ถึง 1 ฉันจะตีความสิ่งนี้ได้อย่างไร ไม่สามารถใช้กับเมทริกซ์ความสับสนได้โดยตรง
Raghuram

2
ฉันยังไม่ได้ลอง predict_generator เลย (มันค่อนข้างใหม่) แต่ดูเหมือนว่าจะส่งคืนความน่าจะเป็นของคลาส พยายามแปลงค่า <= 0.5 ถึง 0 และ> 0.5 ถึง 1 เมื่อคุณมีรายการที่ประกอบด้วย 0s และ 1s แล้วคุณสามารถป้อนค่าไปยังฟังก์ชันเพื่อคำนวณเมทริกซ์ความสับสน
stmax

2
นอกจากนี้สิ่งนี้จะใช้ได้ดีสำหรับปัญหาสองระดับ แต่ถ้ามีมากกว่าสองคลาส
Raghuram

1
หากมีมากกว่าสองคลาสเครือข่ายของคุณต้องการเอาต์พุตมากกว่าหนึ่ง สำหรับคลาส n คุณมีเอาต์พุต n และคุณคาดการณ์คลาสที่มีเอาต์พุตสูงสุด ดูฟังก์ชั่น softmax ( en.wikipedia.org/wiki/Softmax_function )
stmax

คำตอบ:


15

ในการรับเมทริกซ์ความสับสนจากข้อมูลทดสอบคุณควรดำเนินการสองขั้นตอน:

  1. ทำการคาดการณ์ข้อมูลการทดสอบ

ตัวอย่างเช่นใช้model.predict_generatorในการทำนายความน่าจะเป็น 2,000 รายการแรกจากเครื่องมือสร้างการทดสอบ

generator = datagen.flow_from_directory(
        'data/test',
        target_size=(150, 150),
        batch_size=16,
        class_mode=None,  # only data, no labels
        shuffle=False)  # keep data in same order as labels

probabilities = model.predict_generator(generator, 2000)
  1. คำนวณเมทริกซ์ความสับสนตามการทำนายเลเบล

ตัวอย่างเช่นเปรียบเทียบความน่าจะเป็นกับกรณีที่มีแมว 1,000 ตัวและสุนัข 1,000 ตัวตามลำดับ

from sklearn.metrics import confusion_matrix

y_true = np.array([0] * 1000 + [1] * 1000)
y_pred = probabilities > 0.5

confusion_matrix(y_true, y_pred)

หมายเหตุเพิ่มเติมเกี่ยวกับข้อมูลการทดสอบและการตรวจสอบ

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


2
ขอบคุณสำหรับตัวอย่างโค้ด คุณช่วยลิงค์สองอันนี้ได้ไหม ในตัวอย่าง y_true ของคุณดูเหมือนว่ามีข้อมูลจำลอง คุณจะใช้ generator.classes ในการสร้างอาร์เรย์หรือไม่?
Gegenwind

ฉันไม่แน่ใจ แต่ฉันคิดว่าแทนที่จะเป็นnp.array([0] * 1000 + [1] * 1000)คุณจะได้รับอาร์เรย์เดียวกันโดยทำgenerator.classes
Mehdi Nellen

2

นี่คือรหัสที่ฉันได้ลองและทำงานให้ฉัน:

pred= model.predict_generator(validation_generator, nb_validation_samples // batch_size)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (validation_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

จากนั้นคุณสามารถใช้:

print (confusion matrix(predicted_class_indices,labels)

ตรวจสอบให้แน่ใจว่าคุณใช้shuffle=Falseในเครื่องมือสร้างการทดสอบ (ในกรณีของฉันคือเครื่องมือตรวจสอบความถูกต้อง) และรีเซ็ตโดยใช้validation_generator.reset()ก่อนที่คุณจะทำการคาดการณ์


0

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


ขอบคุณสำหรับคำตอบ. ฉันรู้ว่า Keras ไม่มีแพ็คเกจเมทริกซ์ความสับสนของตัวเอง คำถามของฉันคือ model.predict_generator ส่งคืนรายการค่าลอยซึ่งไม่สามารถใช้ในการคำนวณเมทริกซ์ความสับสน
Raghuram

คุณกำลังทดลองใช้ข้อมูลประเภทใด
enterML

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