Ağırlıklar neden sadece eğitimde kullanılabilir?

0

Soru

Uyum işlevini çağırdıktan sonra, modelin eğitimde yakınlaştığını görebiliyorum, ancak değerlendirme yöntemini çağırdıktan sonra, model uydurmayı hiç yapmamış gibi davranıyor. En iyi örnek, eğitim jeneratörünü eğitim ve doğrulama için kullandığım ve farklı sonuçlar aldığım yerdir.

import tensorflow as tf
from tensorflow.keras.callbacks import ModelCheckpoint

from ImageGenerator import ImageGenerator

if __name__== "__main__":

    batch_size=64

    train_gen = ImageGenerator('synthetic3/train/open/*.png', 'synthetic3/train/closed/*.png', batch_size=batch_size)

    model = tf.keras.applications.mobilenet_v2.MobileNetV2(weights=None, classes=2, input_shape=(256, 256, 3))

    model.compile(optimizer='adam', 
                loss=tf.keras.losses.CategoricalCrossentropy(),
                metrics=['accuracy'])

    history = model.fit(
        train_gen,
        validation_data=train_gen,
        epochs=5,
        verbose=1
    )
    
    model.evaluate(train_gen)

Sonuçlar

Epoch 1/5
19/19 [==============================] - 11s 600ms/step - loss: 0.7707 - accuracy: 0.5016 - val_loss: 0.6932 - val_accuracy: 0.5016
Epoch 2/5
19/19 [==============================] - 10s 533ms/step - loss: 0.6991 - accuracy: 0.5855 - val_loss: 0.6935 - val_accuracy: 0.4975
Epoch 3/5
19/19 [==============================] - 10s 509ms/step - loss: 0.6213 - accuracy: 0.6637 - val_loss: 0.6932 - val_accuracy: 0.4992
Epoch 4/5
19/19 [==============================] - 10s 514ms/step - loss: 0.4407 - accuracy: 0.8158 - val_loss: 0.6934 - val_accuracy: 0.5008
Epoch 5/5
19/19 [==============================] - 10s 504ms/step - loss: 0.3200 - accuracy: 0.8643 - val_loss: 0.6949 - val_accuracy: 0.5000
19/19 [==============================] - 3s 159ms/step - loss: 0.6953 - accuracy: 0.4967

Bu sorunludur, çünkü ağırlıkları kaydederken bile, model uydurmayı yapmamış gibi tasarruf sağlar.

keras machine-learning python tensorflow
2021-11-24 04:34:14
2
0

evaluate () işlevi, önceden eğitilmiş modeli değerlendirmek için bir girdi olarak bir doğrulama veri kümesi alır.

Görünüşe göre validation_data için bir eğitim veri kümesi (train_gen) kullanıyor ve aynı veri kümesini modele bir girdi olarak geçiriyorsunuz.değerlendirmek()

2021-11-24 11:43:27

Evet, bunu, tren doğruluğunun doğrulamayı geliştirmesine rağmen, aynı veri kümesinde bile olmadığını göstermek için yaptım
ac4824

En iyi cevabı

0

Herkese merhaba, günlerce süren acıdan sonra nihayet bu sorunun çözümünü keşfetti. Bunun nedeni, modeldeki toplu normalleştirme katmanlarından kaynaklanmaktadır. Özel veri kümesi olarak eğitim almayı planlıyorsanız momentum parametresinin parti boyutunuza göre değiştirilmesi gerekir.

for layer in model.layers:
    if type(layer)==type(tf.keras.layers.BatchNormalization()):
        # renorm=True, Can have renomalization for smaller batch sizes
        layer.momentum=new_momentum

Kaynaklar: https://github.com/tensorflow/tensorflow/issues/36065

2021-12-10 04:30:31

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................