De ce sunt greutățile doar pentru a fi utilizat în instruire?

0

Problema

După ce a sunat la fit eu pot vedea că modelul este convergent în formare, dar după mă duc să sun la evaluarea metodă acționează ca în cazul în care modelul nu a făcut deloc potrivit. Cel mai bun exemplu este mai jos în cazul în care am folosi de formare generator de tren și de validare și de a obține rezultate diferite.

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)

Rezultate

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

Acest lucru este problematic, deoarece chiar și atunci când salvarea greutăți se salvează ca în cazul în care modelul nu a facut montarea.

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

evalua funcția() are o validare date ca pe o intrare pentru a evalua antrenat deja modelul.

Din câte se pare utilizați un set de date de antrenament (train_gen) pentru validation_data și trecerea același set de date, ca date de intrare pentru model.evaluarea()

2021-11-24 11:43:27

Da, am făcut asta intenționat pentru a arăta că, deși trenul precizia este îmbunătățirea sistemului de validare nu este. Chiar și pe același set de date
ac4824

Cel mai bun răspuns

0

Hi toată lumea, după mai multe zile de dureri descoperit, în sfârșit, soluția la această problemă. Acest lucru se datorează lot normalizarea straturi în model. Impulsul parametru trebuie să fie schimbat în funcție de mărimea lotului, dacă aveți de gând pe de formare ca un custom set de date.

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

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

2021-12-10 04:30:31

În alte limbi

Această pagină este în alte limbi

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