Garfield
YZF Admin
TensorFlow’da eğitimi başlatmak için önce modeli
Ekranda
Yalnızca eğitim verisindeki doğruluk, modelin yeni verilerde de başarılı olduğunu kanıtlamaz. Eğitim sırasında ayrı bir doğrulama kümesi kullanmak için
Bu durumda her dönem sonunda
Sık kullanılan
Aşağıdaki seçenekler eğitim davranışını değiştirir; her birini ihtiyaca göre kullanın.
Örneğin doğrulama kaybı iyileşmeyi bıraktığında eğitimi durdurmak için:
Son dönemlerde
Tahmin almak için eğitimden sonra
Çıktı 0 ile 1 arasında bir olasılık olur. Örneğin
Eğitim sırasında
compile() ile yapılandırmalı, ardından eğitim verilerini model.fit() çağrısına vermelisiniz. Eğitim tamamlandığında her dönem için kayıp ve seçtiğiniz metrikler görüntülenir; doğrulama verisi kullanırsanız modelin eğitim dışında kalan verilerdeki başarısını da izleyebilirsiniz.Eğitimden önce gerekenler
model.fit() tek başına bir modeli eğitmez. Önce model oluşturulmalı, giriş verileri ile etiketlerin şekli uyumlu olmalı ve compile() içinde en az bir iyileştirici ile kayıp işlevi seçilmelidir. Aşağıdaki varsayımsal örnekte amaç, iki sınıftan birini tahmin eden küçük bir model eğitmektir.En küçük çalışan örnek
- TensorFlow’u içe aktarın ve eğitim verisini hazırlayın. Bu örnekte her satır iki özellikten oluşur;
yise beklenen sınıf etiketidir.
Python:
import tensorflow as tf
import numpy as np
x = np.array([
[0.0, 0.0],
[0.0, 1.0],
[1.0, 0.0],
[1.0, 1.0]
], dtype=np.float32)
y = np.array([0, 1, 1, 1], dtype=np.float32)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(2,)),
tf.keras.layers.Dense(8, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid")
])
- Modelin eğitim ayarlarını yapın. Tek bir 0/1 çıktısı üretildiği için
binary_crossentropykaybı uygundur.accuracymetriği, doğru sınıflandırma oranını izler.
Python:
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"]
)
- Eğitimi başlatın.
epochs=100, modelin tüm eğitim verisini 100 kez görmesini ister.verbose=1varsayılan ilerleme çıktısını gösterir.
Python:
history = model.fit(
x,
y,
epochs=100,
verbose=1
)
Ekranda
Epoch 1/100, loss ve accuracy gibi değerler görünüyorsa eğitim başlamıştır. history nesnesi de her dönem için ölçülen sonuçları saklar. Örneğin eğitim kaybına şu şekilde erişebilirsiniz:
Python:
print(history.history["loss"][-1])
print(history.history["accuracy"][-1])
Doğrulama verisiyle sonucu kontrol etme
Yalnızca eğitim verisindeki doğruluk, modelin yeni verilerde de başarılı olduğunu kanıtlamaz. Eğitim sırasında ayrı bir doğrulama kümesi kullanmak için
validation_data verin. Aşağıdaki ayrı varsayımsal örnek 100 gözlemi 80 eğitim ve 20 doğrulama örneğine ayırır. Model yeniden oluşturulur; önceki dört satırla eğitilmiş ağırlıklar kullanılmaz.
Python:
# Ayrı bir varsayımsal veriyle yeni model oluşturun.
rng = np.random.default_rng(42)
x_tum = rng.random((100, 2), dtype=np.float32)
y_tum = (x_tum.sum(axis=1) > 1.0).astype(np.float32).reshape(-1, 1)
x_train, x_val = x_tum[:80], x_tum[80:]
y_train, y_val = y_tum[:80], y_tum[80:]
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(2,)),
tf.keras.layers.Dense(8, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid")
])
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
history = model.fit(
x_train,
y_train,
epochs=20,
validation_data=(x_val, y_val),
batch_size=32,
verbose=1
)
Bu durumda her dönem sonunda
val_loss ve val_accuracy değerleri de yazdırılır. Eğitim doğruluğu artarken doğrulama doğruluğu düşüyor veya doğrulama kaybı sürekli yükseliyorsa model eğitim verisini ezberliyor olabilir. Böyle bir sonuç, modelin kesinlikle kullanılamaz olduğunu değil, veri, model yapısı veya eğitim süresinin yeniden değerlendirilmesi gerektiğini gösterir.Sık kullanılan fit() seçenekleri
Aşağıdaki seçenekler eğitim davranışını değiştirir; her birini ihtiyaca göre kullanın.
| Seçenek | Görevi | Dikkat edilmesi gereken |
|---|---|---|
epochs | Veri kümesinin kaç kez baştan sona işleneceğini belirler. | Çok yüksek değer ezberlemeye yol açabilir. |
batch_size | Ağırlıkların kaç örnekten sonra güncelleneceğini belirler. | Bellek kullanımı ve eğitim davranışı değişebilir. |
validation_split | Dizinin bir bölümünü doğrulama için ayırır. | Dizi tabanlı girdilerde kullanılmalıdır; veri sıralamasını dikkate alın. |
callbacks | Eğitim sırasında erken durdurma veya kayıt gibi işlemler ekler. | İzlenecek değer, örneğin val_loss, açıkça seçilmelidir. |
Python:
early_stop = tf.keras.callbacks.EarlyStopping(
monitor="val_loss",
patience=3,
restore_best_weights=True
)
history = model.fit(
x_train,
y_train,
epochs=50,
validation_data=(x_val, y_val),
callbacks=[early_stop]
)
Eğitimin gerçekten işe yaradığını nasıl anlarsınız?
Son dönemlerde
loss değerinin azalması ve seçilen metriğin yükselmesi modelin eğitim verisine uyum sağladığını gösterir. Bu tek başına yeni verilerde iyi tahmin yapacağını kanıtlamaz; bunun için eğitimde kullanılmayan bir test kümesiyle ayrıca değerlendirme yapmalısınız.Tahmin almak için eğitimden sonra
predict() kullanabilirsiniz:
Python:
tahmin = model.predict(np.array([[1.0, 0.0]], dtype=np.float32))
print(tahmin)
Çıktı 0 ile 1 arasında bir olasılık olur. Örneğin
0.8 değeri modelin 1 sınıfına daha yakın bir tahmin yaptığını gösterir; bu değer tahminin kesinlikle doğru olduğunu kanıtlamaz. Karar eşiğini doğrulama verisinde seçin; seçilmiş modeli ve eşiği nihai, ayrı test verisindeki etiketlerle karşılaştırın.Sık sorulan sorular
model.fit() çağrısından önce compile() neden gereklidir?
compile(), modelin kaybı nasıl hesaplayacağını, ağırlıkları hangi iyileştiriciyle güncelleyeceğini ve hangi metrikleri göstereceğini belirler. Bu ayar yapılmadan eğitim çağrısı eksik kalır.Eğitim sırasında loss azalıyor ama accuracy artmıyorsa ne kontrol edilmelidir?
Önce etiketlerin biçimini, son katmanın etkinleştirme işlevini ve seçilen kayıp işlevinin birbiriyle uyumunu kontrol edin. Ayrıca giriş verilerinin ölçeği, sınıf dağılımı ve model çıktısının beklenen şekli incelenmelidir.
Son düzenleme: