معرفی
دو مرحله برای ادغام 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
.
آموزش با دیتا فریم پاندا
این راهنما در طول یک دوره برای سرعت تمرین می کند، اما می تواند به راحتی با افزایش تعداد دوره ها، عملکرد مدل را بهبود بخشد.
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
با این حال، در صورتی که مدل خود را است زیر کلاس از 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
به طور مستقیم. در عوض، شما نیاز به آن را زیر مجموعه به عنوان توضیح داده شده در راهنمای سفارشی .
منابع اضافی
- برای به بحث در ارزیابی انصاف دیدن هدایت انصاف شاخص
- برای اطلاعات بیشتر در بازسازی و MinDiff، را ببینید مروری اصلاح .
- برای جزئیات بیشتر در مورد نیاز اطراف MinDiff دیدن این راهنمای .
- برای دیدن آموزش پایان به پایان در مورد استفاده از MinDiff در Keras، و این آموزش .