Точность поезда улучшается, но проверка остается неизменной? - PullRequest
0 голосов
/ 20 мая 2019

Я использую TF 2.0. Я пытался обучить сеть на моих собственных данных. Это не шло хорошо. Точность валидации была близка к 0 и оставалась неизменной. Я пробовал много регуляризации безрезультатно. Затем я попытался обучить сеть на 3 классах данных, где все изображения в каждом классе одинаковы, чтобы исключить возможность изменчивости. Но это тоже не работает. Поскольку все изображения в классе одинаковы, я ожидаю, что точность проверки будет точно соответствовать точности обучения, поскольку новых данных нет. Почему это не так? Вот мой код:

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.applications.mobilenet import preprocess_input
import matplotlib.pyplot as plt

base_model = tf.keras.applications.MobileNet(weights='imagenet', include_top=False)


def turn_off(n):
    for layer in model.layers[:n]:
        layer.trainable = False
    for layer in model.layers[n:]:
        layer.trainable = True


x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(
    x)  # we add dense layers so that the model can learn more complex functions and classify for better results.
x = Dense(1024, activation='relu')(x)  # dense layer 2
x = Dense(512, activation='relu')(x)  # dense layer 3
preds = Dense(3, activation='softmax')(x)  # final layer with softmax activation

model = Model(inputs=base_model.input, outputs=preds)

turn_off(87)

train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
                                   rescale=1. / 255,
                                   validation_split=0.2)  # set validation split

train_generator = train_datagen.flow_from_directory(
    '/users/josh.flori/desktop/colors/',
    target_size=(224, 224),
    batch_size=32,
    color_mode='rgb',
    class_mode='categorical',
    subset='training',
    shuffle=True)  # set as training data

validation_generator = train_datagen.flow_from_directory(
    '/users/josh.flori/desktop/colors/',
    target_size=(224, 224),
    batch_size=32,
    color_mode='rgb',
    class_mode='categorical',
    subset='validation',
    shuffle=True)  # set as validation data

# Adam optimizer
# loss function will be categorical cross entropy
# evaluation metric will be accuracy
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit_generator(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // train_generator.batch_size,
    epochs=6)

Вот тренировочный результат

9/9 [==============================] - 19s 2s/step - loss: 0.2645 - accuracy: 0.9134 - val_loss: 1.6668 - val_accuracy: 0.3438
Epoch 2/6
9/9 [==============================] - 20s 2s/step - loss: 0.0417 - accuracy: 0.9567 - val_loss: 2.6176 - val_accuracy: 0.3438
Epoch 3/6
9/9 [==============================] - 17s 2s/step - loss: 0.4771 - accuracy: 0.9422 - val_loss: 4.0694 - val_accuracy: 0.3438
Epoch 4/6
9/9 [==============================] - 18s 2s/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 2.1304 - val_accuracy: 0.3125
Epoch 5/6
9/9 [==============================] - 18s 2s/step - loss: 9.7658e-07 - accuracy: 1.0000 - val_loss: 3.1633 - val_accuracy: 0.3125
Epoch 6/6
9/9 [==============================] - 18s 2s/step - loss: 2.2571e-05 - accuracy: 1.0000 - val_loss: 3.4949 - val_accuracy: 0.3125

Мои папки с изображениями выглядят так

image

, где в папке ровно 128 одинаковых изображений.

Я читаю весь день, пробую разные картинки, похоже, никуда не денусь. Что вызывает это конкретное поведение? Это должно быть что-то очевидное, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...