Интуиция за колебаниями тренировочной потери - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь создать сверточный автоэнкодер для изображений размером 28x28x5.Ниже приведена сводная информация о моей модели:


Layer (type)                 Output Shape              Param #
=================================================================
conv2d_1 (Conv2D)            (None, 28, 28, 16)        736
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 16)        0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 14, 14, 8)         1160
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 7, 7, 8)           0
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 7, 7, 8)           584
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 4, 4, 8)           0
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 4, 4, 8)           584
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 8, 8, 8)           0
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 8, 8, 8)           584
_________________________________________________________________
up_sampling2d_2 (UpSampling2 (None, 16, 16, 8)         0


_________________________________________________________________
conv2d_6 (Conv2D)            (None, 14, 14, 16)        1168
_________________________________________________________________
up_sampling2d_3 (UpSampling2 (None, 28, 28, 16)        0
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 28, 28, 5)         725
=================================================================
Total params: 5,541
Trainable params: 5,541
Non-trainable params: 0

При построении графика обучения и ошибок тестирования для каждой эпохи я получаю следующий график: enter image description here С началом обученияпри 0,01 и достижении 0,01 / 750 = 0,000013333

Я, хотя колебания могут быть из-за слишком высокой скорости обучения, поэтому я попытался снова с 0,00001 до 0,0000002, в результате чего: enter image description here

Почему потери на тренировке всегда так сильно колеблются, а ошибка тестирования почти постоянна?Это нормальное поведение?Мне кажется, что они должны вести себя одинаково.Первоначальное уменьшение обоих потерь на первом графике заставляет меня поверить, что код, по крайней мере, делает что-то правильно, но остальные чувствуют себя не так.

Ниже мой тренировочный код:

(trainX, testX, trainY, testY) = train_test_split(newData,
    newData, test_size=0.25)

# construct the image generator for data augmentation
aug = ImageDataGenerator(rotation_range=30, width_shift_range=0.1,
    height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
    horizontal_flip=True, fill_mode="nearest")

model = AutoEncoder.build(width=28, height=28, depth=5)

# initialize our initial learning rate, # of epochs to train for,
# and batch size
INIT_LR = 0.001
EPOCHS = 50
BS = 16

opt = SGD(lr=INIT_LR, decay=INIT_LR / EPOCHS)

model.compile(loss="mean_squared_error", optimizer = opt)

H = model.fit_generator(aug.flow(trainX, trainY, batch_size=BS),
    validation_data=(testX, testY), steps_per_epoch=len(trainX) // BS,
    epochs=EPOCHS)

РЕДАКТИРОВАТЬ:

Пример строки в слое изображения в обучающем наборе:

[ 7.41672516e-03  3.14044952e-03 -1.39656067e-02 -1.18265152e-02
  6.34765625e-03  1.27620697e-02  1.49002075e-02 -6.48117065e-03
  1.00231171e-03 -2.20489502e-03  3.14044952e-03  1.00231171e-03
  1.00231171e-03  3.14044952e-03  1.00231171e-03  4.20951843e-03
 -1.13582611e-03  1.06239319e-02  6.34765625e-03  4.20951843e-03
  1.49002075e-02  4.20951843e-03 -6.67572021e-05 -6.67572021e-05
 -1.13582611e-03 -3.27396393e-03 -5.41210175e-03 -6.48117065e-03]

Тестовый набор:

[ 1.3831139e-02  1.2762070e-02  7.4167252e-03  2.0713806e-03
 -1.1826515e-02 -7.5502396e-03  1.0023117e-03  3.1404495e-03
  2.6660919e-02 -6.6757202e-05  6.3476562e-03  2.0713806e-03
 -7.5502396e-03 -1.1358261e-03  1.0023117e-03  1.0023117e-03
 -1.1358261e-03 -6.4811707e-03  5.2785873e-03 -4.3430328e-03
  1.0023117e-03  1.1693001e-02  2.3453712e-02  1.3831139e-02
  1.9177437e-02  1.5969276e-02  2.0713806e-03  2.0713806e-03]

Поскольку оба они происходят от одного и того жевходной набор данных Я не думаю, что это будет проблемой

РЕДАКТИРОВАТЬ 2: Обучение с 450000 изображений приводит к этому: enter image description here

Добавление дополнительных данных обучения, кажется,устранить проблему, хотя мне все еще странно, почему ошибка обучения так сильно колеблется, а ошибка проверки - нет.

РЕДАКТИРОВАТЬ 3:

Также увеличивая размер пакета: enter image description here

...