Я пытаюсь создать сверточный автоэнкодер для изображений размером 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
При построении графика обучения и ошибок тестирования для каждой эпохи я получаю следующий график: С началом обученияпри 0,01 и достижении 0,01 / 750 = 0,000013333
Я, хотя колебания могут быть из-за слишком высокой скорости обучения, поэтому я попытался снова с 0,00001 до 0,0000002, в результате чего:
Почему потери на тренировке всегда так сильно колеблются, а ошибка тестирования почти постоянна?Это нормальное поведение?Мне кажется, что они должны вести себя одинаково.Первоначальное уменьшение обоих потерь на первом графике заставляет меня поверить, что код, по крайней мере, делает что-то правильно, но остальные чувствуют себя не так.
Ниже мой тренировочный код:
(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 изображений приводит к этому:
Добавление дополнительных данных обучения, кажется,устранить проблему, хотя мне все еще странно, почему ошибка обучения так сильно колеблется, а ошибка проверки - нет.
РЕДАКТИРОВАТЬ 3:
Также увеличивая размер пакета: