ทั่วไป
ยังจำเป็นต้องใช้ EvalSavedModel อยู่หรือไม่
ก่อนหน้านี้ TFMA กำหนดให้มีการจัดเก็บเมตริกทั้งหมดไว้ในกราฟเทนเซอร์โฟลว์โดยใช้ EvalSavedModel
พิเศษ ตอนนี้ สามารถคำนวณเมตริกนอกกราฟ TF ได้โดยใช้การใช้งาน beam.CombineFn
ความแตกต่างหลักบางประการ ได้แก่ :
-
EvalSavedModel
จำเป็นต้องมีการส่งออกพิเศษจากผู้ฝึกสอน ในขณะที่รูปแบบการให้บริการสามารถใช้ได้โดยไม่ต้องเปลี่ยนแปลงใดๆ ในรหัสการฝึก - เมื่อใช้
EvalSavedModel
เมตริกใดๆ ที่เพิ่มในขณะฝึกจะพร้อมใช้งานโดยอัตโนมัติในเวลาประเมิน หากไม่มีEvalSavedModel
จะต้องเพิ่มเมตริกเหล่านี้อีกครั้ง- ข้อยกเว้นของกฎนี้คือถ้าใช้โมเดล keras เมตริกก็สามารถเพิ่มได้โดยอัตโนมัติ เนื่องจาก keras บันทึกข้อมูลเมตริกไว้ด้านข้างของโมเดลที่บันทึกไว้
TFMA สามารถทำงานร่วมกับเมตริกในกราฟและเมตริกภายนอกได้หรือไม่
TFMA อนุญาตให้ใช้วิธีไฮบริดในที่ซึ่งบางเมตริกสามารถคำนวณได้ในกราฟ โดยที่ส่วนอื่นๆ สามารถคำนวณได้จากภายนอก หากปัจจุบันคุณมี EvalSavedModel
คุณสามารถใช้มันต่อไปได้
มีสองกรณี:
- ใช้ TFMA
EvalSavedModel
สำหรับทั้งการแยกคุณลักษณะและการคำนวณเมตริก แต่ยังเพิ่มเมตริกที่อิงตามตัวรวมเพิ่มเติมด้วย ในกรณีนี้ คุณจะได้รับเมตริกในกราฟทั้งหมดจากEvalSavedModel
พร้อมกับเมตริกเพิ่มเติมจากตัวรวมข้อมูลที่อาจไม่ได้รับการสนับสนุนก่อนหน้านี้ - ใช้ TFMA
EvalSavedModel
สำหรับการดึงคุณลักษณะ/การคาดการณ์ แต่ใช้เมตริกที่อิงตามตัวรวมสำหรับการคำนวณเมตริกทั้งหมด โหมดนี้มีประโยชน์หากมีการแปลงคุณลักษณะในEvalSavedModel
ที่คุณต้องการใช้สำหรับการแบ่งส่วน แต่ต้องการดำเนินการคำนวณเมตริกทั้งหมดนอกกราฟ
ติดตั้ง
รองรับรุ่นใดบ้าง?
TFMA รองรับโมเดล keras โมเดลที่ใช้ API ลายเซ็น TF2 ทั่วไป รวมถึงโมเดลที่อิงตาม TF estimator (แม้ว่าขึ้นอยู่กับกรณีการใช้งาน โมเดลที่ใช้ตัวประมาณอาจต้องใช้ EvalSavedModel
)
ดูคู่มือ get_started สำหรับรายการประเภทโมเดลที่รองรับทั้งหมดและข้อจำกัดใดๆ
ฉันจะตั้งค่า TFMA ให้ทำงานกับโมเดลตาม Keras ดั้งเดิมได้อย่างไร
ต่อไปนี้เป็นตัวอย่างการกำหนดค่าสำหรับโมเดล keras ตามสมมติฐานต่อไปนี้:
- โมเดลที่บันทึกไว้มีไว้สำหรับให้บริการและใช้ชื่อที่เป็นลายเซ็น
serving_default
(ซึ่งสามารถเปลี่ยนแปลงได้โดยใช้model_specs[0].signature_name
) - ตัววัดที่สร้างขึ้นจาก
model.compile(...)
ควรได้รับการประเมิน (สามารถปิดใช้งานได้ผ่านoptions.include_default_metric
ภายใน tfma.EvalConfig )
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
label_key: "<label-key>"
example_weight_key: "<example-weight-key>"
}
metrics_specs {
# Add metrics here. For example:
# metrics { class_name: "ConfusionMatrixPlot" }
# metrics { class_name: "CalibrationPlot" }
}
slicing_specs {}
""", tfma.EvalConfig())
ดู เมตริก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมตริกประเภทอื่นๆ ที่สามารถกำหนดค่าได้
ฉันจะตั้งค่า TFMA ให้ทำงานกับโมเดลที่ใช้ลายเซ็น TF2 ทั่วไปได้อย่างไร
ต่อไปนี้คือตัวอย่างการกำหนดค่าสำหรับโมเดล TF2 ทั่วไป ด้านล่าง signature_name
คือชื่อของลายเซ็นเฉพาะที่ควรใช้สำหรับการประเมิน
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
signature_name: "<signature-name>"
label_key: "<label-key>"
example_weight_key: "<example-weight-key>"
}
metrics_specs {
# Add metrics here. For example:
# metrics { class_name: "BinaryCrossentropy" }
# metrics { class_name: "ConfusionMatrixPlot" }
# metrics { class_name: "CalibrationPlot" }
}
slicing_specs {}
""", tfma.EvalConfig())
ดู เมตริก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมตริกประเภทอื่นๆ ที่สามารถกำหนดค่าได้
ฉันจะตั้งค่า TFMA ให้ทำงานกับแบบจำลองตามตัวประมาณได้อย่างไร
ในกรณีนี้มีสามทางเลือก
ตัวเลือกที่ 1: ใช้รูปแบบการให้บริการ
หากใช้ตัวเลือกนี้ เมตริกใดๆ ที่เพิ่มระหว่างการฝึกอบรมจะไม่รวมอยู่ในการประเมิน
ต่อไปนี้คือตัวอย่างการกำหนดค่าโดยสมมติว่า serving_default
เป็นชื่อลายเซ็นที่ใช้:
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
label_key: "<label-key>"
example_weight_key: "<example-weight-key>"
}
metrics_specs {
# Add metrics here.
}
slicing_specs {}
""", tfma.EvalConfig())
ดู เมตริก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมตริกประเภทอื่นๆ ที่สามารถกำหนดค่าได้
ตัวเลือกที่ 2: ใช้ EvalSavedModel ร่วมกับตัววัดที่อิงตามตัวรวมเพิ่มเติม
ในกรณีนี้ ให้ใช้ EvalSavedModel
สำหรับทั้งการแยกคุณลักษณะ/การคาดคะเนและการประเมิน และเพิ่มเมตริกตามตัวรวมเพิ่มเติม
ต่อไปนี้เป็นตัวอย่างการกำหนดค่า:
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
signature_name: "eval"
}
metrics_specs {
# Add metrics here.
}
slicing_specs {}
""", tfma.EvalConfig())
ดูเมท ริก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมทริกประเภทอื่นๆ ที่สามารถกำหนดค่าได้ และ EvalSavedModel สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า EvalSavedModel
ตัวเลือกที่ 3: ใช้แบบจำลอง EvalSavedModel เฉพาะสำหรับการแยกคุณลักษณะ/การคาดการณ์
คล้ายกับตัวเลือก (2) แต่ใช้ EvalSavedModel
สำหรับการดึงคุณลักษณะ / การคาดคะเนเท่านั้น ตัวเลือกนี้มีประโยชน์หากต้องการเฉพาะเมตริกภายนอก แต่มีการแปลงคุณลักษณะที่คุณต้องการแบ่ง คล้ายกับตัวเลือก (1) ตัวชี้วัดใดๆ ที่เพิ่มระหว่างการฝึกอบรมจะไม่รวมอยู่ในการประเมิน
ในกรณีนี้ การกำหนดค่าจะเหมือนกับด้านบน เฉพาะ include_default_metrics
เท่านั้นที่ปิดใช้งาน
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
signature_name: "eval"
}
metrics_specs {
# Add metrics here.
}
slicing_specs {}
options {
include_default_metrics { value: false }
}
""", tfma.EvalConfig())
ดูเมท ริก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมทริกประเภทอื่นๆ ที่สามารถกำหนดค่าได้ และ EvalSavedModel สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า EvalSavedModel
ฉันจะตั้งค่า TFMA ให้ทำงานกับโมเดลที่อิงตาม keras model-to-estimator ได้อย่างไร
การตั้งค่า keras model_to_estimator
คล้ายกับการกำหนดค่าตัวประมาณ อย่างไรก็ตาม มีความแตกต่างบางประการเฉพาะเกี่ยวกับวิธีการทำงานของแบบจำลองเพื่อประมาณการ โดยเฉพาะอย่างยิ่ง model-to-esimtator ส่งคืนเอาต์พุตในรูปแบบของ dict โดยที่คีย์ dict เป็นชื่อของเลเยอร์เอาต์พุตสุดท้ายในโมเดล keras ที่เกี่ยวข้อง (หากไม่มีชื่อ keras จะเลือกชื่อเริ่มต้นสำหรับคุณ เช่นหนาแน่น output_1
dense_1
จากมุมมองของ TFMA ลักษณะการทำงานนี้คล้ายกับสิ่งที่จะเป็นเอาต์พุตสำหรับโมเดลที่มีเอาต์พุตหลายตัว แม้ว่าโมเดลที่จะเป็นตัวประมาณอาจใช้สำหรับโมเดลเดียวเท่านั้น เพื่อพิจารณาความแตกต่างนี้ จำเป็นต้องมีขั้นตอนเพิ่มเติมในการตั้งชื่อผลลัพธ์ อย่างไรก็ตาม ใช้สามตัวเลือกเดียวกันกับตัวประมาณ
ต่อไปนี้คือตัวอย่างการเปลี่ยนแปลงที่จำเป็นสำหรับการกำหนดค่าตามตัวประมาณการ:
from google.protobuf import text_format
config = text_format.Parse("""
... as for estimator ...
metrics_specs {
output_names: ["<keras-output-layer>"]
# Add metrics here.
}
... as for estimator ...
""", tfma.EvalConfig())
ฉันจะตั้งค่า TFMA ให้ทำงานกับการคาดการณ์ที่คำนวณล่วงหน้า (เช่น แบบไม่เชื่อเรื่องพระเจ้า) ได้อย่างไร ( TFRecord
และ tf.Example
)
ในการกำหนดค่า TFMA ให้ทำงานกับการคาดการณ์ที่คำนวณไว้ล่วงหน้า ต้องปิดใช้งาน tfma.PredictExtractor
เริ่มต้น และต้องกำหนดค่า tfma.InputExtractor
เพื่อแยกวิเคราะห์การคาดคะเนพร้อมกับคุณลักษณะอินพุตอื่นๆ ซึ่งทำได้โดยการกำหนดค่า tfma.ModelSpec
ด้วยชื่อของคีย์คุณลักษณะที่ใช้สำหรับการคาดการณ์ควบคู่ไปกับป้ายกำกับและน้ำหนัก
ต่อไปนี้เป็นตัวอย่างการตั้งค่า:
from google.protobuf import text_format
config = text_format.Parse("""
model_specs {
prediction_key: "<prediction-key>"
label_key: "<label-key>"
example_weight_key: "<example-weight-key>"
}
metrics_specs {
# Add metrics here.
}
slicing_specs {}
""", tfma.EvalConfig())
ดู ตัวชี้วัด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวชี้วัดที่สามารถกำหนดค่าได้
โปรดทราบว่าแม้ว่า tfma.ModelSpec
กำลังได้รับการกำหนดค่าโมเดลที่ไม่ได้ใช้งานจริง (เช่นไม่มี tfma.EvalSharedModel
) การเรียกใช้การวิเคราะห์แบบจำลองอาจมีลักษณะดังนี้:
eval_result = tfma.run_model_analysis(
eval_config=eval_config,
# This assumes your data is a TFRecords file containing records in the
# tf.train.Example format.
data_location="/path/to/file/containing/tfrecords",
output_path="/path/for/metrics_for_slice_proto")
ฉันจะตั้งค่า TFMA ให้ทำงานกับการคาดการณ์ที่คำนวณล่วงหน้า (เช่น แบบไม่เชื่อเรื่องพระเจ้า) ได้อย่างไร ( pd.DataFrame
)
สำหรับชุดข้อมูลขนาดเล็กที่สามารถใส่ลงในหน่วยความจำได้ ทางเลือกแทน TFRecord
คือ pandas.DataFrame
s TFMA สามารถทำงานบน pandas.DataFrame
โดยใช้ tfma.analyze_raw_data
API สำหรับคำอธิบายของ tfma.MetricsSpec
และ tfma.SlicingSpec
โปรดดูคู่มือ การตั้งค่า ดู ตัวชี้วัด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวชี้วัดที่สามารถกำหนดค่าได้
ต่อไปนี้เป็นตัวอย่างการตั้งค่า:
# Run in a Jupyter Notebook.
df_data = ... # your pd.DataFrame
eval_config = text_format.Parse("""
model_specs {
label_key: 'label'
prediction_key: 'prediction'
}
metrics_specs {
metrics { class_name: "AUC" }
metrics { class_name: "ConfusionMatrixPlot" }
}
slicing_specs {}
slicing_specs {
feature_keys: 'language'
}
""", config.EvalConfig())
eval_result = tfma.analyze_raw_data(df_data, eval_config)
tfma.view.render_slicing_metrics(eval_result)
ตัวชี้วัด
รองรับเมตริกประเภทใดบ้าง
TFMA รองรับตัวชี้วัดที่หลากหลาย รวมถึง:
- ตัวชี้วัดการถดถอย
- ตัวชี้วัดการจำแนกประเภทไบนารี
- เมตริกการจำแนกประเภทหลายคลาส/หลายป้ายกำกับ
- ค่าเฉลี่ยไมโคร / เมตริกค่าเฉลี่ยมาโคร
- แบบสอบถาม / การจัดอันดับตามตัวชี้วัด
รองรับเมตริกจากโมเดลหลายเอาต์พุตหรือไม่
ใช่. ดูคู่มือ เมตริก สำหรับรายละเอียดเพิ่มเติม
รองรับเมตริกจากหลายรุ่นหรือไม่
ใช่. ดูคู่มือ เมตริก สำหรับรายละเอียดเพิ่มเติม
สามารถปรับแต่งการตั้งค่าเมตริก (ชื่อ ฯลฯ) ได้หรือไม่
ใช่. การตั้งค่าเมตริกสามารถกำหนดเองได้ (เช่น การตั้งค่าเกณฑ์เฉพาะ ฯลฯ) โดยเพิ่มการตั้ง config
การกำหนดค่าในการกำหนดค่าเมตริก ดูคู่มือ เมตริก มีรายละเอียดเพิ่มเติม
รองรับเมตริกที่กำหนดเองหรือไม่
ใช่. ไม่ว่าจะโดยการเขียนการใช้งาน tf.keras.metrics.Metric
แบบกำหนดเองหรือโดยการเขียนการใช้งาน beam.CombineFn
แบบกำหนดเอง คู่มือ เมตริก มีรายละเอียดเพิ่มเติม
ไม่รองรับเมตริกประเภทใด
ตราบใดที่เมตริกของคุณสามารถคำนวณได้โดยใช้ beam.CombineFn
จะไม่มีข้อจำกัดเกี่ยวกับประเภทของเมตริกที่สามารถคำนวณตาม tfma.metrics.Metric
หากทำงานกับเมตริกที่มาจาก tf.keras.metrics.Metric
จะต้องเป็นไปตามเกณฑ์ต่อไปนี้:
- ควรจะสามารถคำนวณสถิติที่เพียงพอสำหรับตัววัดในแต่ละตัวอย่างอย่างอิสระ จากนั้นรวมสถิติที่เพียงพอเหล่านี้โดยการเพิ่มลงในตัวอย่างทั้งหมด และกำหนดค่าตัวชี้วัดจากสถิติที่เพียงพอเหล่านี้เท่านั้น
- ตัวอย่างเช่น เพื่อความถูกต้อง สถิติที่เพียงพอคือ "ถูกต้องทั้งหมด" และ "ตัวอย่างทั้งหมด" เป็นไปได้ที่จะคำนวณตัวเลขสองตัวนี้สำหรับตัวอย่างแต่ละรายการ และเพิ่มลงในกลุ่มตัวอย่างเพื่อให้ได้ค่าที่ถูกต้องสำหรับตัวอย่างเหล่านั้น ความแม่นยำสุดท้ายสามารถคำนวณได้โดยใช้ "ตัวอย่างที่ถูกต้องทั้งหมด / ตัวอย่างทั้งหมด"
ส่วนเสริม
ฉันสามารถใช้ TFMA เพื่อประเมินความเป็นธรรมหรืออคติในแบบจำลองของฉันได้หรือไม่
TFMA มีส่วนเสริม FairnessIndicators ที่ให้ตัวชี้วัดหลังการส่งออกสำหรับการประเมินผลกระทบของอคติที่ไม่ได้ตั้งใจในแบบจำลองการจัดประเภท
การปรับแต่ง
จะทำอย่างไรถ้าฉันต้องการการปรับแต่งเพิ่มเติม
TFMA มีความยืดหยุ่นสูงและให้คุณปรับแต่งเกือบทุกส่วนของไปป์ไลน์โดยใช้ Extractors
, Evaluators
และ/หรือ Writers
แบบกำหนดเอง บทคัดย่อเหล่านี้จะกล่าวถึงในรายละเอียดเพิ่มเติมในเอกสาร สถาปัตยกรรม
การแก้ไขปัญหา การดีบัก และการขอความช่วยเหลือ
เหตุใดตัววัด MultiClassConfusionMatrix ไม่ตรงกับตัววัด ConfusionMatrix แบบไบนารี
นี่เป็นการคำนวณที่แตกต่างกันจริงๆ Binarization ทำการเปรียบเทียบสำหรับ ID คลาสแต่ละคลาสอย่างอิสระ (เช่น การคาดการณ์สำหรับแต่ละคลาสจะถูกเปรียบเทียบแยกจากกันกับขีดจำกัดที่ให้ไว้) ในกรณีนี้ เป็นไปได้ที่คลาสตั้งแต่สองคลาสขึ้นไปทั้งหมดระบุว่าตรงกับการคาดการณ์ เนื่องจากค่าที่คาดการณ์ไว้มากกว่าเกณฑ์ ในกรณีของเมทริกซ์ความสับสนแบบหลายคลาส ยังคงมีค่าที่ทำนายไว้จริงเพียงค่าเดียวและตรงกับค่าจริงหรือไม่ตรงกับค่าจริง เกณฑ์จะใช้เพื่อบังคับให้การคาดการณ์ไม่ตรงกับคลาสใดหากน้อยกว่าเกณฑ์ ยิ่งเกณฑ์สูงเท่าไร การทำนายของคลาสไบนารีก็จะยิ่งยากขึ้นเท่านั้น ในทำนองเดียวกัน ยิ่งธรณีประตูยิ่งต่ำก็ยิ่งง่ายสำหรับการคาดการณ์ของคลาสไบนารีที่จะจับคู่ หมายความว่า ที่ขีดจำกัด > 0.5 ค่าไบนารีและค่าเมทริกซ์มัลติคลาสจะถูกจัดชิดใกล้ยิ่งขึ้น และที่ขีดจำกัด < 0.5 พวกเขาจะห่างกันมากขึ้น
ตัวอย่างเช่น สมมติว่าเรามี 10 คลาสที่คาดการณ์คลาส 2 ด้วยความน่าจะเป็น 0.8 แต่คลาสจริงคือคลาส 1 ซึ่งมีความน่าจะเป็น 0.15 หากคุณไบนารีในคลาส 1 และใช้เกณฑ์ 0.1 คลาส 1 จะถือว่าถูกต้อง (0.15 > 0.1) ดังนั้นจะถูกนับเป็น TP อย่างไรก็ตาม สำหรับกรณีมัลติคลาส คลาส 2 จะถือว่าถูกต้อง (0.8 > 0.1) และเนื่องจากคลาส 1 เป็นคลาสจริง สิ่งนี้จะถูกนับเป็น FN เนื่องจากที่เกณฑ์ที่ต่ำกว่า ค่าที่มากกว่าจะถูกพิจารณาว่าเป็นค่าบวก โดยทั่วไปแล้วจะมีการนับ TP และ FP สำหรับเมทริกซ์ความสับสนแบบไบนารีที่สูงกว่าสำหรับเมทริกซ์ความสับสนแบบหลายคลาส และ TN และ FN ที่ต่ำกว่าในทำนองเดียวกัน
ต่อไปนี้คือตัวอย่างความแตกต่างที่สังเกตได้ระหว่าง MultiClassConfusionMatrixAtThresholds และการนับที่สอดคล้องกันจากการทำไบนารีของหนึ่งในคลาส
เหตุใดเมตริก Precision@1 และ Recall@1 ของฉันจึงมีค่าเท่ากัน
ที่ค่า k สูงสุดของ 1 ความแม่นยำและการเรียกคืนเป็นสิ่งเดียวกัน ความแม่นยำเท่ากับ TP / (TP + FP)
และการเรียกคืนเท่ากับ TP / (TP + FN)
การคาดคะเนสูงสุดเป็นค่าบวกเสมอและจะตรงกันหรือไม่ตรงกับป้ายกำกับ กล่าวอีกนัยหนึ่งด้วยตัวอย่าง N
TP + FP = N
อย่างไรก็ตาม หากป้ายกำกับไม่ตรงกับการคาดการณ์ระดับบนสุด แสดงว่าการคาดคะเนที่ไม่ใช่ท็อป k ถูกจับคู่และเมื่อตั้งค่า k สูงสุดเป็น 1 การคาดคะเนที่ไม่ใช่ท็อป 1 ทั้งหมดจะเป็น 0 ซึ่งหมายความว่า FN จะต้องเป็น (N - TP)
หรือ N = TP + FN
ผลลัพธ์ที่ได้คือ precision@1 = TP / N = recall@1
โปรดทราบว่าสิ่งนี้ใช้ได้เฉพาะเมื่อมีป้ายกำกับเดียวต่อตัวอย่าง ไม่ใช่สำหรับหลายป้ายกำกับ
เหตุใดเมตริกmean_labelและmean_predictionของฉันจึงเป็น 0.5 เสมอ
กรณีนี้น่าจะเกิดขึ้นมากที่สุดเนื่องจากมีการกำหนดค่าเมตริกสำหรับปัญหาการจำแนกประเภทไบนารี แต่โมเดลแสดงความน่าจะเป็นสำหรับทั้งสองคลาสแทนที่จะเป็นเพียงคลาสเดียว นี่เป็นเรื่องปกติเมื่อ ใช้ API การจำแนกประเภทของเทนเซอร์โฟลว์ วิธีแก้ปัญหาคือเลือกคลาสที่คุณต้องการให้การคาดคะเนเป็นพื้นฐาน จากนั้นจึงทำไบนารีในคลาสนั้น ตัวอย่างเช่น:
eval_config = text_format.Parse("""
...
metrics_specs {
binarize { class_ids: { values: [0] } }
metrics { class_name: "MeanLabel" }
metrics { class_name: "MeanPrediction" }
...
}
...
""", config.EvalConfig())
จะตีความ MultiLabelConfusionMatrixPlot ได้อย่างไร
ด้วยป้ายกำกับเฉพาะ คุณสามารถใช้ MultiLabelConfusionMatrixPlot
(และ MultiLabelConfusionMatrix
ที่เกี่ยวข้อง) เพื่อเปรียบเทียบผลลัพธ์ของป้ายกำกับอื่นๆ และการคาดคะเนเมื่อป้ายกำกับที่เลือกเป็นจริง ตัวอย่างเช่น สมมติว่าเรามีสามคลาส bird
, plane
และ superman
และเรากำลังจัดประเภทรูปภาพเพื่อระบุว่ามีคลาสเหล่านี้อย่างน้อยหนึ่งคลาสหรือไม่ MultiLabelConfusionMatrix
จะคำนวณผลคูณคาร์ทีเซียนของคลาสจริงแต่ละคลาสเทียบกับคลาสอื่น (เรียกว่าคลาสที่คาดคะเน) โปรดทราบว่าในขณะที่การจับคู่เป็น (actual, predicted)
คลาสที่ predicted
ไม่จำเป็นต้องหมายความถึงการทำนายเชิงบวก แต่เพียงแสดงคอลัมน์ที่ทำนายในเมทริกซ์จริงเทียบกับที่คาดการณ์ไว้ ตัวอย่างเช่น สมมติว่าเราได้คำนวณเมทริกซ์ต่อไปนี้:
(bird, bird) -> { tp: 6, fp: 0, fn: 2, tn: 0}
(bird, plane) -> { tp: 2, fp: 2, fn: 2, tn: 2}
(bird, superman) -> { tp: 1, fp: 1, fn: 4, tn: 2}
(plane, bird) -> { tp: 3, fp: 1, fn: 1, tn: 3}
(plane, plane) -> { tp: 4, fp: 0, fn: 4, tn: 0}
(plane, superman) -> { tp: 1, fp: 3, fn: 3, tn: 1}
(superman, bird) -> { tp: 3, fp: 2, fn: 2, tn: 2}
(superman, plane) -> { tp: 2, fp: 3, fn: 2, tn: 2}
(superman, superman) -> { tp: 4, fp: 0, fn: 5, tn: 0}
num_examples: 20
MultiLabelConfusionMatrixPlot
มีสามวิธีในการแสดงข้อมูลนี้ ในทุกกรณี วิธีการอ่านตารางจะเป็นแบบแถวต่อแถวจากมุมมองของชั้นเรียนจริง
1) จำนวนการคาดการณ์ทั้งหมด
ในกรณีนี้ สำหรับแถวที่กำหนด (เช่น คลาสจริง) จำนวน TP + FP
สำหรับคลาสอื่นๆ คืออะไร สำหรับการนับข้างต้น การแสดงผลของเราจะเป็นดังนี้:
ทำนายนก | เครื่องบินที่คาดการณ์ | ซุปเปอร์แมนที่ทำนายไว้ | |
---|---|---|---|
นกจริง | 6 | 4 | 2 |
เครื่องบินจริง | 4 | 4 | 4 |
ซุปเปอร์แมนตัวจริง | 5 | 5 | 4 |
เมื่อภาพมี bird
จริง ๆ เราทำนายได้ถูกต้อง 6 ตัว ในขณะเดียวกัน เราก็ทำนาย plane
(ถูกหรือผิด) 4 ครั้ง และ superman
(ถูกหรือผิด) 2 ครั้ง
2) จำนวนการทำนายที่ไม่ถูกต้อง
ในกรณีนี้ สำหรับแถวที่กำหนด (เช่น คลาสจริง) FP
นั้นนับอะไรสำหรับคลาสอื่นๆ สำหรับการนับข้างต้น การแสดงผลของเราจะเป็นดังนี้:
ทำนายนก | เครื่องบินที่คาดการณ์ | ซุปเปอร์แมนที่ทำนายไว้ | |
---|---|---|---|
นกจริง | 0 | 2 | 1 |
เครื่องบินจริง | 1 | 0 | 3 |
ซุปเปอร์แมนตัวจริง | 2 | 3 | 0 |
เมื่อภาพมี bird
จริงเราทำนาย plane
ผิด 2 ครั้งและ superman
1 ครั้ง
3) จำนวนลบเท็จ
ในกรณีนี้ สำหรับแถวที่กำหนด (เช่น คลาสจริง) FN
จะนับอะไรสำหรับคลาสอื่นๆ สำหรับการนับข้างต้น การแสดงผลของเราจะเป็นดังนี้:
ทำนายนก | เครื่องบินที่คาดการณ์ | ซุปเปอร์แมนที่ทำนายไว้ | |
---|---|---|---|
นกจริง | 2 | 2 | 4 |
เครื่องบินจริง | 1 | 4 | 3 |
ซุปเปอร์แมนตัวจริง | 2 | 2 | 5 |
เมื่อภาพมี bird
อยู่จริงเราไม่สามารถคาดเดาได้ถึง 2 ครั้ง ในเวลาเดียวกัน เราล้มเหลวในการทำนาย plane
2 ครั้ง และ superman
4 ครั้ง
เหตุใดฉันจึงได้รับข้อผิดพลาดเกี่ยวกับไม่พบคีย์การคาดคะเน
แบบจำลองบางรุ่นแสดงการทำนายในรูปแบบของพจนานุกรม ตัวอย่างเช่น ตัวประมาณ TF สำหรับปัญหาการจำแนกประเภทไบนารีจะส่งออกพจนานุกรมที่มี probabilities
เป็น class_ids
เป็นต้น ในกรณีส่วนใหญ่ TFMA มีค่าเริ่มต้นสำหรับการค้นหาชื่อคีย์ที่ใช้กันทั่วไป เช่น predictions
probabilities
เป็น ฯลฯ อย่างไรก็ตาม หากแบบจำลองของคุณมีการปรับแต่งมาก อาจ คีย์เอาต์พุตภายใต้ชื่อที่ TFMA ไม่รู้จัก ในกรณีเหล่านี้ ต้องเพิ่มการตั้งค่า prediciton_key
ใน tfma.ModelSpec
เพื่อระบุชื่อของคีย์ที่เอาต์พุตถูกเก็บไว้