Я работаю над набором данных CIFAR-10 и пытаюсь получить эталон или точность не менее 90%.Я перепробовал все перечисленные ниже способы, но большинство из них приводят к одному и тому же результату, и это ... точность обучения не улучшается после некоторых эпох и остается стабильной, а также точность проверки немного колеблется.
Каталог набора данных имеет вид:
\cifar
\train(total 40,000 images. 4000 images per class. Total 10 classes)
\airplane
\automobile......(similar structure for test and validation as well)
\test.(total 10,000 images. 1000 images per class)
\validation.(total 10,000 images. 1000 images per class)
code.py
Я пробовал использовать следующие параметры:
- Оптимизаторы: Адам, Надам, Ададелта и SGD,
- Размеры партии: 16,32.
- Изначально началось с 2 слоев свертки.Сначала я тренировался с 64 фильтрами в обоих, а затем в обоих слоях свертки со 128 фильтрами.Теперь я добавил третий слой свертки.
Вот код:
import keras
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense, Dropout,
Activation, BatchNormalization, GlobalAveragePooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras import optimizers, regularizers
classifier = Sequential()
classifier.add(Conv2D(filters=64, kernel_size=(3,3), input_shape= (32,32,3), use_bias=False))
classifier.add(BatchNormalization())
classifier.add(Activation('relu'))
classifier.add(MaxPool2D(pool_size=(2,2)))
classifier.add(Conv2D(filters=64, kernel_size=(3,3), use_bias=False))
classifier.add(BatchNormalization())
classifier.add(Activation('relu'))
classifier.add(MaxPool2D(pool_size=(2,2)))
classifier.add(Conv2D(filters=64, kernel_size=(3,3), use_bias=False))
classifier.add(BatchNormalization())
classifier.add(Activation('relu'))
classifier.add(MaxPool2D(pool_size=(2,2)))
classifier.add(GlobalAveragePooling2D())
classifier.add(Dense(units=10,activation='softmax'))
'''
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
'''
classifier.compile(optimizer='nadam', loss='categorical_crossentropy', metrics=['accuracy'])
train_datagen=ImageDataGenerator(rescale=1./255,
featurewise_center=True,featurewise_std_normalization=True,
shear_range=0.2,rotation_range=20, width_shift_range=0.2,
height_shift_range=0.2,horizontal_flip=True)
test_datagen=ImageDataGenerator(rescale=1./255,
featurewise_center=True,featurewise_std_normalization=True)
train_dataset=train_datagen.flow_from_directory(
directory='cifar/train', target_size=(32,32),
batch_size=16, class_mode='categorical')
test_dataset=test_datagen.flow_from_directory(
directory='cifar/validation', target_size=(32,32),
batch_size=16, class_mode='categorical')
classifier.fit_generator(train_dataset,
steps_per_epoch=2500, epochs=50,
validation_data=test_dataset, validation_steps=625)
А вот наблюдения эпохи:
Epoch 17/50
2500/2500 [==============================] - 259s 103ms/step - loss:
0.9305 - acc: 0.6840 - val_loss: 0.8195 - val_acc: 0.7111
Epoch 18/50
2500/2500 [==============================] - 257s 103ms/step - loss:
0.9280 - acc: 0.6817 - val_loss: 0.9981 - val_acc: 0.6816
Epoch 19/50
2500/2500 [==============================] - 260s 104ms/step - loss:
0.9112 - acc: 0.6896 - val_loss: 0.9393 - val_acc: 0.6786
Epoch 20/50
2500/2500 [==============================] - 257s 103ms/step - loss:
0.9053 - acc: 0.6881 - val_loss: 0.8509 - val_acc: 0.7172
Epoch 21/50
2500/2500 [==============================] - 259s 104ms/step - loss:
0.9110 - acc: 0.6874 - val_loss: 0.8427 - val_acc: 0.7211
Epoch 22/50
2500/2500 [==============================] - 257s 103ms/step - loss:
0.8967 - acc: 0.6944 - val_loss: 0.7139 - val_acc: 0.7592
Epoch 23/50
2500/2500 [==============================] - 257s 103ms/step - loss:
0.8825 - acc: 0.6967 - val_loss: 0.8611 - val_acc: 0.7066
Epoch 24/50
2500/2500 [==============================] - 260s 104ms/step - loss:
0.8819 - acc: 0.6967 - val_loss: 0.7436 - val_acc: 0.7447
Epoch 25/50
2500/2500 [==============================] - 270s 108ms/step - loss:
0.8780 - acc: 0.6995 - val_loss: 0.8129 - val_acc: 0.7310
Epoch 26/50
2500/2500 [==============================] - 279s 112ms/step - loss:
0.8756 - acc: 0.7010 - val_loss: 0.7890 - val_acc: 0.7276
Epoch 27/50
2500/2500 [==============================] - 283s 113ms/step - loss:
0.8680 - acc: 0.7027 - val_loss: 0.8185 - val_acc: 0.7307
Epoch 28/50
2500/2500 [==============================] - 287s 115ms/step - loss:
0.8651 - acc: 0.7043 - val_loss: 0.7457 - val_acc: 0.7460
Epoch 29/50
2500/2500 [==============================] - 286s 114ms/step - loss:
0.8531 - acc: 0.7065 - val_loss: 1.1669 - val_acc: 0.6483
Epoch 30/50
2500/2500 [==============================] - 290s 116ms/step - loss:
0.8521 - acc: 0.7085 - val_loss: 0.7221 - val_acc: 0.7565
Epoch 31/50
2500/2500 [==============================] - 289s 116ms/step - loss:
0.8518 - acc: 0.7072 - val_loss: 0.7308 - val_acc: 0.7549
Epoch 32/50
2500/2500 [==============================] - 291s 116ms/step - loss:
0.8465 - acc: 0.7119 - val_loss: 0.8550 - val_acc: 0.7182
Epoch 33/50
2500/2500 [==============================] - 302s 121ms/step - loss:
0.8406 - acc: 0.7121 - val_loss: 1.0259 - val_acc: 0.6770
Epoch 34/50
2500/2500 [==============================] - 286s 115ms/step - loss:
0.8424 - acc: 0.7120 - val_loss: 0.6924 - val_acc: 0.7646
Epoch 35/50
2500/2500 [==============================] - 273s 109ms/step - loss:
0.8337 - acc: 0.7143 - val_loss: 0.8744 - val_acc: 0.7220
Epoch 36/50
2500/2500 [==============================] - 285s 114ms/step - loss:
0.8332 - acc: 0.7144 - val_loss: 1.0132 - val_acc: 0.6753
Epoch 37/50
2500/2500 [==============================] - 275s 110ms/step - loss:
0.8382 - acc: 0.7122 - val_loss: 0.7873 - val_acc: 0.7366
Яначинающий в глубоком обучении, так что извините меня, если я, возможно, сделал какую-то глупую ошибку.Пожалуйста, покажите мне, как мне действовать дальше.