Различные результаты обучения и проверки с одним и тем же вводом Keras - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь переобучить MobileNet для различных целей мультиклассификации:

train_datagen = ImageDataGenerator(
     preprocessing_function = preprocess_input

training_generator = train_datagen.flow_from_directory(
    directory = train_data_dir,
    target_size=(parameters["img_width"], parameters["img_height"]),
    batch_size = parameters["batch_size"],
    class_mode= "categorical",
    subset = "training",
    color_mode = "rgb",
    seed = 42)

# Define the Model
base_model = MobileNet(weights='imagenet', 
                       include_top=False, input_shape = (128, 128, 3)) #imports the mobilenet model and discards the last 1000 neuron layer.

# Let only the last n layers as trainable
for layer in base_model.layers:
    layer.trainable = False


x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(800,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x = Dense(600,activation='relu')(x) #dense layer 2
x = Dropout(0.8)(x)
x = Dense(256,activation='relu')(x) #dense layer 3
x = Dropout(0.2)(x)
preds = Dense(N_classes, activation='softmax')(x) #final layer with softmax activation
model= Model(inputs = base_model.input, outputs = preds)

model.compile(optimizer = "Adam", loss='categorical_crossentropy', metrics=['accuracy'])

И выполняю обучение , установив в качестве набора данных проверки, обучение установлено как :

history = model.fit_generator(
        training_generator,
        steps_per_epoch= training_generator.n // parameters["batch_size"],

        epochs = parameters["epochs"]
        ,
        ##### VALIDATION SET = TRAINING 
        validation_data = training_generator,
        validation_steps = training_generator.n // parameters["batch_size"],

        callbacks=[
                EarlyStopping(monitor = "acc", patience = 8, restore_best_weights=False),
                ReduceLROnPlateau(patience = 3)]
        )

Однако я получаю значительные различия в точности между ТОЧНОСТЬЮ ОБУЧЕНИЯ И ВАЛИДАЦИИ , даже если они являются одним и тем же набором данных во время обучения;с чем это может быть связано?

Training Screenshot

1 Ответ

0 голосов
/ 28 апреля 2019

Обучение нейронной сети предполагает случайное распределение данных в базе данных обучения. Из-за этого результаты не воспроизводимы. Если вы получаете значительные различия в точности, вы можете попробовать:

  1. получить большую базу данных обучения;
  2. переучить сеть;
  3. получить базу данных с более последовательными результатами.

LE: не имеет значения, если вы получаете значительные различия в точности во время тренировки . Обучение - это итеративный процесс оптимизации, который минимизирует целевую функцию среднеквадратичной ошибки. До достижения этой цели требуется некоторое время.

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