Pourquoi le poids utilisable uniquement en formation?

0

La question

Après l'appel de la fonction fit je peux voir que le modèle de convergence dans la formation, mais après je vais appeler la méthode evaluate il agit comme si le modèle n'a pas fait le montage à tous. Le meilleur exemple ci-dessous où j'utilise le générateur de formation pour former et de validation et d'obtenir des résultats différents.

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)

Résultats

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

C'est problématique parce que même lors de l'enregistrement de poids, il enregistre comme si le modèle n'a pas fait le montage.

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

evaluate() fonction prend une validation du jeu de données comme une entrée pour évaluer déjà formés modèle.

Apparemment vous êtes en utilisant un ensemble de données d'apprentissage (train_gen) pour validation_data et en passant le même ensemble de données en entrée du modèle.evaluate()

2021-11-24 11:43:27

Ouais, je l'ai fait exprès pour montrer que même si le train la précision est de l'amélioration de la validation n'est pas. Même sur le même ensemble de données
ac4824

La meilleure réponse

0

Bonjour à tous après plusieurs jours de douleur enfin découvert la solution à ce problème. Cela est dû à la normalisation de lots de couches dans le modèle. L'élan paramètre doit être modifié en fonction de la taille des lots, si vous prévoyez de formation comme un dataset personnalisé.

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

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

2021-12-10 04:30:31

Dans d'autres langues

Cette page est dans d'autres langues

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