¿Por qué son los pesos sólo se puede utilizar en el entrenamiento?

0

Pregunta

Después de llamar el ajuste de la función puedo ver que el modelo de la convergencia en el entrenamiento, pero después de que me vaya a llamar el método de evaluación actúa como si el modelo no ha hecho el ajuste en todos. El mejor ejemplo está por debajo de donde yo uso la formación de un generador de tren y de validación y obtener resultados diferentes.

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)

Resultados

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

Esto es problemático porque incluso cuando el ahorro pesos guarda como si el modelo no ha hecho la conexión.

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

función evaluate() toma un conjunto de datos de validación como un insumo para evaluar ya capacitados modelo.

Desde el aspecto de que está utilizando un conjunto de datos de entrenamiento (train_gen) para validation_data y pasar por el mismo conjunto de datos de entrada al modelo.evaluar()

2021-11-24 11:43:27

Sí, lo he hecho a propósito para demostrar que aunque el tren de la precisión es la mejora de la validación no lo es. Incluso en el mismo conjunto de datos
ac4824

Mejor respuesta

0

Hola a todos, después de muchos días de dolor se descubrió finalmente la solución a este problema. Esto es debido a la hornada de la normalización de las capas en el modelo. El impulso parámetro debe ser cambiado de acuerdo a su tamaño de lote, si usted planea en la formación como un conjunto de datos personalizado.

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

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

2021-12-10 04:30:31

En otros idiomas

Esta página está en otros idiomas

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