TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
Tanıtım
MinDiff'i modelinize entegre etmenin iki adımı vardır:
(Kaplı verileri Hazırlama giriş hazırlığı kılavuz ).
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:
- MinDiff olmadan yaptığınız gibi orijinal modeli oluşturun.
original_model = tutorials_utils.get_uci_model()
- Bir bunu sarın
MinDiffModel
.
min_diff_model = min_diff.keras.MinDiffModel(
original_model=original_model,
loss=min_diff.losses.MMDLoss(),
loss_weight=1)
- MinDiff olmadan yaptığınız gibi derleyin.
min_diff_model.compile(optimizer='adam', loss='binary_crossentropy')
- 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ırloss
metrik (değil çıkış gösterilmiştir) vemin_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 .