MinDiff'i MinDiffModel ile Entegre Etme

Tanıtım

MinDiff'i modelinize entegre etmenin iki adımı vardır:

  1. (Kaplı verileri Hazırlama giriş hazırlığı kılavuz ).

  2. Eğitim sırasında MinDiff'i entegre edecek bir modeli değiştirin veya oluşturun.

Kullanarak: Bu kılavuz, ikinci adımı tamamlamak için basit yolu kapsayacaktır MinDiffModel .

Kurmak

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

İlk önce verileri indirin. Açıklandığı gibi özlülük için, giriş hazırlığı mantık YardımcıFonksiyonlar içine çarpanlarına girdi hazırlığı rehberi . Bu işlemle ilgili ayrıntılar için kılavuzun tamamını okuyabilirsiniz.

# 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))

Orijinal Model

Bu kılavuz, temel, untuned kullanan keras.Model kullanarak Fonksiyonel API MinDiff kullanarak vurgulamak için. Gerçek dünya uygulamasında, herhangi bir adalet sorununu çözmeye çalışmadan önce model mimarisini dikkatli bir şekilde seçer ve model kalitesini iyileştirmek için ayarlamayı kullanırsınız.

Yana MinDiffModel en Keras ile çalışmak için tasarlanmıştır Model : sınıflar, bir yardımcı fonksiyonu içine bir model inşa mantığını dışarı çarpanlarına get_uci_model .

Pandas DataFrame ile Eğitim

Bu kılavuz, hız için tek bir dönem üzerinde eğitim verir, ancak dönemlerin sayısını artırarak modelin performansını kolayca iyileştirebilir.

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

Bir ile eğitilmesi tf.data.Dataset

Bir eşdeğer eğitim tf.data.Dataset (başlatma ve giriş rasgelelik hafif farklı sonuçlar olsa da) çok benzer olacaktır.

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

Eğitim için MinDiff'i entegre etme

Veriler hazırlandıktan sonra aşağıdaki adımlarla MinDiff'i modelinize uygulayın:

  1. MinDiff olmadan yaptığınız gibi orijinal modeli oluşturun.
original_model = tutorials_utils.get_uci_model()
  1. Bir bunu sarın MinDiffModel .
min_diff_model = min_diff.keras.MinDiffModel(
    original_model=original_model,
    loss=min_diff.losses.MMDLoss(),
    loss_weight=1)
  1. MinDiff olmadan yaptığınız gibi derleyin.
min_diff_model.compile(optimizer='adam', loss='binary_crossentropy')
  1. MinDiff veri kümesi (ile Tren train_with_min_diff_ds bu durumda).
_ = min_diff_model.fit(train_with_min_diff_ds, epochs=1)
77/77 [==============================] - 6s 31ms/step - loss: 0.7883 - min_diff_loss: 0.0379

Değerlendirme ve birlikte Tahmin MinDiffModel

Değerlendirilmesi ve bir ile tahmin Hem MinDiffModel orijinal modeli ile bunu yaparken benzer.

Ararken evaluate orijinal veri kümesi ya MinDiff verilerini içeren bir tane ile geçebilir. İkinci seçeneği varsa, ayrıca alacak min_diff_loss ölçülen başka ölçümlere ek olarak metrik loss da içerecektir min_diff_loss .

Ararken evaluate orijinal veri kümesi ya MinDiff verilerini içeren bir tane ile geçebilir. Değerlendirmek için çağrıya MinDiff'i dahil ederseniz, iki şey farklı olacaktır:

  • Ek bir ölçüm olarak adlandırılan min_diff_loss çıkış mevcut olacaktır.
  • Değeri loss metrik orijinal toplamı olacaktır loss metrik (değil çıkış gösterilmiştir) ve 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

Ararken predict teknik olarak da MinDiff verilerle veri kümesindeki geçebilir ama yok sayılacak ve çıktıyı etkilemez.

_ = 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.

Kullanmanın Sınırlamalar MinDiffModel doğrudan

Kullanırken MinDiffModel yukarıda tarif edildiği gibi, pek çok yöntem varsayılan uygulamaları kullanır tf.keras.Model (listelenen durumlar API belgeleri ).

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

İçin keras.Sequential veya keras.Model , bu aynı işlevleri kullanabilirsiniz beri gayet olumlu.

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

Ancak, model ise alt sınıfı keras.Model ile sararak, MinDiffModel özelleştirmeyi kaybedecektir.

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

Bu Kullanım durumunuz ise, kullanmalısınız değil MinDiffModel doğrudan. Bunun yerine, anlatıldığı gibi alt sınıf gerekecektir özelleştirme rehberi .

Ek kaynaklar

  • Adalet değerlendirmeye derin tartışmalara için bkz Adil Göstergeler rehberlik
  • İyileştirme ve MinDiff hakkında genel bilgi için, bkz düzeltme bakış .
  • MinDiff çevreleyen gereksinimleri hakkında ayrıntılı bilgi için bkz bu kılavuzu .
  • Keras içinde MinDiff kullanma konusunda uçtan uca öğretici görmek için bkz bu öğretici .