ادغام MinDiff با MinDiffModel

معرفی

دو مرحله برای ادغام MinDiff در مدل شما وجود دارد:

  1. آماده به داده ها (تحت پوشش در راهنمای آماده سازی ورودی ).

  2. مدلی را تغییر دهید یا ایجاد کنید که 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 را با مراحل زیر به مدل خود اعمال کنید:

  1. بدون MinDiff مدل اصلی را ایجاد کنید.
original_model = tutorials_utils.get_uci_model()
  1. قرار دادن آن در یک MinDiffModel .
min_diff_model = min_diff.keras.MinDiffModel(
    original_model=original_model,
    loss=min_diff.losses.MMDLoss(),
    loss_weight=1)
  1. آن را همانطور که بدون MinDiff انجام می دهید کامپایل کنید.
min_diff_model.compile(optimizer='adam', loss='binary_crossentropy')
  1. آموزش آن را با مجموعه داده 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 به طور مستقیم. در عوض، شما نیاز به آن را زیر مجموعه به عنوان توضیح داده شده در راهنمای سفارشی .

منابع اضافی