Perché sono i pesi utilizzabile solo in allenamento?

0

Domanda

Dopo aver chiamato la funzione di adattamento vedo che il modello è convergente in formazione, ma dopo vado a chiamare il metodo di valutazione si comporta come se il modello non ha fatto il montaggio in tutte. L'esempio migliore è al di sotto, dove io uso il generatore di formazione per il treno e la convalida e ottenere risultati diversi.

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)

Risultati

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

Questo è problematico, perché, anche quando il risparmio di pesi salva come se il modello non ha fatto il montaggio.

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

valutare la funzione() prende un validation set di dati come input per valutare già allenato modello.

Dagli sguardi di esso si utilizza un set di dati di training (train_gen) per validation_data e passare lo stesso set di dati come input al modello.valutare()

2021-11-24 11:43:27

Sì, l'ho fatto di proposito per mostrare che, anche se il treno precisione è migliorare la convalida non è. Anche sullo stesso set di dati
ac4824

Migliore risposta

0

Ciao a tutti, dopo molti giorni di dolore finalmente scoperto la soluzione a questo problema. Questo è dovuto al lotto di normalizzazione dei livelli del modello. La quantità di moto parametro deve essere cambiato secondo la vostra dimensione di lotto, se si intende la formazione come un set di dati personalizzato.

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

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

2021-12-10 04:30:31

In altre lingue

Questa pagina è in altre lingue

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