บทนำ
มีสองขั้นตอนในการรวม MinDiff เข้ากับโมเดลของคุณ:
เตรียมข้อมูล (ครอบคลุมใน คู่มือการเตรียมการป้อนข้อมูล )
แก้ไขหรือสร้างแบบจำลองที่จะรวม MinDiff ระหว่างการฝึก
คู่มือนี้จะครอบคลุมวิธีที่ง่ายที่สุดที่จะเสร็จสิ้นขั้นตอนที่สอง: การใช้ MinDiffModel
ติดตั้ง
pip install -q --upgrade tensorflow-model-remediation
import tensorflow as tf
tf.get_logger().setLevel('ERROR') # Avoid TF warnings.
from tensorflow_model_remediation import min_diff
from tensorflow_model_remediation.tools.tutorials_utils import uci as tutorials_utils
ขั้นแรกให้ดาวน์โหลดข้อมูล สำหรับความกะทัดรัดตรรกะการเตรียมการป้อนข้อมูลที่ได้รับปัจจัยออกไปในฟังก์ชั่นผู้ช่วยที่อธิบายไว้ใน คู่มือการเตรียมการป้อนข้อมูล คุณสามารถอ่านคู่มือฉบับเต็มสำหรับรายละเอียดเกี่ยวกับกระบวนการนี้
# Original DataFrame for training, sampled at 0.3 for reduced runtimes.
train_df = tutorials_utils.get_uci_data(split='train', sample=0.3)
# Dataset needed to train with MinDiff.
train_with_min_diff_ds = (
tutorials_utils.get_uci_with_min_diff_dataset(split='train', sample=0.3))
รุ่นดั้งเดิม
คู่มือนี้ใช้พื้นฐาน untuned keras.Model
ใช้ API ของฟังก์ชั่น เพื่อเน้นการใช้ MinDiff ในแอปพลิเคชันในโลกแห่งความเป็นจริง คุณจะต้องเลือกสถาปัตยกรรมแบบจำลองอย่างรอบคอบและใช้การปรับแต่งเพื่อปรับปรุงคุณภาพของแบบจำลองก่อนที่จะพยายามแก้ไขปัญหาความเป็นธรรม
ตั้งแต่ MinDiffModel
ถูกออกแบบมาเพื่อการทำงานด้วยมากที่สุด Keras Model
เรียนเราได้เอาเรื่องตรรกะของการสร้างรูปแบบในการทำงานผู้ช่วยที่: get_uci_model
การฝึกอบรมกับ Pandas DataFrame
คู่มือนี้ฝึกความเร็วในช่วงเวลาเดียว แต่สามารถปรับปรุงประสิทธิภาพของโมเดลได้อย่างง่ายดายโดยการเพิ่มจำนวนยุค
model = tutorials_utils.get_uci_model()
model.compile(optimizer='adam', loss='binary_crossentropy')
df_without_target = train_df.drop(['target'], axis=1) # Drop 'target' for x.
_ = model.fit(
x=dict(df_without_target), # The model expects a dictionary of features.
y=train_df['target'],
batch_size=128,
epochs=1)
77/77 [==============================] - 3s 23ms/step - loss: 0.8589
การฝึกอบรมกับ tf.data.Dataset
การฝึกอบรมเทียบเท่ากับ tf.data.Dataset
จะมีลักษณะคล้ายกันมาก (แม้ว่าการเริ่มต้นและการป้อนข้อมูลการสุ่มอาจให้ผลลัพธ์ที่แตกต่างกันเล็กน้อย)
model = tutorials_utils.get_uci_model()
model.compile(optimizer='adam', loss='binary_crossentropy')
_ = model.fit(
tutorials_utils.df_to_dataset(train_df, batch_size=128), # Converted to Dataset.
epochs=1)
77/77 [==============================] - 3s 23ms/step - loss: 0.6416
การบูรณาการ MinDiff สำหรับการฝึกอบรม
เมื่อเตรียมข้อมูลแล้ว ให้ใช้ MinDiff กับโมเดลของคุณโดยทำตามขั้นตอนต่อไปนี้:
- สร้างแบบจำลองดั้งเดิมตามที่คุณต้องการโดยไม่ต้องใช้ MinDiff
original_model = tutorials_utils.get_uci_model()
- ห่อไว้ใน
MinDiffModel
min_diff_model = min_diff.keras.MinDiffModel(
original_model=original_model,
loss=min_diff.losses.MMDLoss(),
loss_weight=1)
- คอมไพล์ตามที่คุณต้องการโดยไม่ต้องใช้ MinDiff
min_diff_model.compile(optimizer='adam', loss='binary_crossentropy')
- รถไฟกับชุด MinDiff (
train_with_min_diff_ds
ในกรณีนี้)
_ = min_diff_model.fit(train_with_min_diff_ds, epochs=1)
77/77 [==============================] - 6s 31ms/step - loss: 0.7883 - min_diff_loss: 0.0379
การประเมินผลและการทำนายด้วย MinDiffModel
ทั้งการประเมินและคาดการณ์ด้วย MinDiffModel
มีความคล้ายคลึงกับการทำเช่นนั้นกับรูปแบบเดิม
เมื่อโทร evaluate
คุณสามารถส่งได้ทั้งในชุดข้อมูลเดิมหรือหนึ่งที่มีข้อมูล MinDiff หากคุณเลือกที่หลังคุณยังจะได้รับ min_diff_loss
เมตริกนอกเหนือไปจากตัวชี้วัดอื่น ๆ ที่ได้รับการวัด loss
ยังจะรวมถึง min_diff_loss
เมื่อโทร evaluate
คุณสามารถส่งได้ทั้งในชุดข้อมูลเดิมหรือหนึ่งที่มีข้อมูล MinDiff หากคุณรวม MinDiff ในการเรียกเพื่อประเมิน สองสิ่งจะแตกต่างกัน:
- ตัวชี้วัดเพิ่มเติมที่เรียกว่า
min_diff_loss
จะถูกนำเสนอในการส่งออก - ค่าของ
loss
ตัวชี้วัดจะเป็นผลรวมของเดิมloss
ตัวชี้วัด (ไม่ปรากฏในการส่งออก) และmin_diff_loss
_ = min_diff_model.evaluate(
tutorials_utils.df_to_dataset(train_df, batch_size=128))
# Calling with MinDiff data will include min_diff_loss in metrics.
_ = min_diff_model.evaluate(train_with_min_diff_ds)
77/77 [==============================] - 2s 22ms/step - loss: 0.4638 77/77 [==============================] - 3s 32ms/step - loss: 0.5087 - min_diff_loss: 0.0451
เมื่อโทร predict
คุณสามารถทางเทคนิคยังผ่านในชุดข้อมูลที่มีข้อมูล MinDiff แต่มันจะถูกละเว้นและไม่ส่งผลกระทบต่อการส่งออก
_ = min_diff_model.predict(
tutorials_utils.df_to_dataset(train_df, batch_size=128))
_ = min_diff_model.predict(train_with_min_diff_ds) # Identical to results above.
ข้อ จำกัด ของการใช้ MinDiffModel
โดยตรง
เมื่อใช้ MinDiffModel
ตามที่อธิบายไว้ข้างต้นวิธีการส่วนใหญ่จะใช้การใช้งานเริ่มต้นของ tf.keras.Model
(ยกเว้นที่ระบุไว้ใน เอกสาร API )
print('MinDiffModel.fit == keras.Model.fit')
print(min_diff.keras.MinDiffModel.fit == tf.keras.Model.fit)
print('MinDiffModel.train_step == keras.Model.train_step')
print(min_diff.keras.MinDiffModel.train_step == tf.keras.Model.train_step)
MinDiffModel.fit == keras.Model.fit True MinDiffModel.train_step == keras.Model.train_step True
สำหรับ keras.Sequential
หรือ keras.Model
นี้เป็นสมบูรณ์ดีเพราะพวกเขาใช้ฟังก์ชั่นเดียวกัน
print('Sequential.fit == keras.Model.fit')
print(tf.keras.Sequential.fit == tf.keras.Model.fit)
print('tf.keras.Sequential.train_step == keras.Model.train_step')
print(tf.keras.Sequential.train_step == tf.keras.Model.train_step)
Sequential.fit == keras.Model.fit True tf.keras.Sequential.train_step == keras.Model.train_step True
แต่ถ้ารูปแบบของคุณเป็น subclass ของ keras.Model
ห่อมันด้วย MinDiffModel
ได้อย่างมีประสิทธิภาพจะสูญเสียการปรับแต่ง
class CustomModel(tf.keras.Model):
def train_step(self, **kwargs):
pass # Custom implementation.
print('CustomModel.train_step == keras.Model.train_step')
print(CustomModel.train_step == tf.keras.Model.train_step)
CustomModel.train_step == keras.Model.train_step False
หากเป็นกรณีที่ใช้นี้คุณไม่ควรใช้ MinDiffModel
โดยตรง แต่คุณจะต้อง subclass มันตามที่อธิบายไว้ใน คู่มือการปรับแต่ง
แหล่งข้อมูลเพิ่มเติม
- สำหรับในการอภิปรายเชิงลึกเกี่ยวกับการประเมินผลความเป็นธรรมดู คำแนะนำความเป็นธรรมชี้วัด
- สำหรับข้อมูลทั่วไปเกี่ยวกับการฟื้นฟูและ MinDiff ดูที่ ภาพรวมของการฟื้นฟู
- สำหรับรายละเอียดเกี่ยวกับข้อกำหนดโดยรอบ MinDiff ดู คำแนะนำนี้
- หากต้องการดูแบบ end-to-end กวดวิชาเกี่ยวกับการใช้ MinDiff ใน Keras ดู การกวดวิชานี้