Хорошо, поэтому мне нужна точность проверки на 99,5% больше для набора данных MNIST с очень небольшим количеством обучаемых параметров (должно быть меньше 8000), и я попробовал большинство подходов, таких как настройка гиперпараметра, используя разные Оптимизаторы, пробовал увеличение изображения, добавление дополнительных свертывающих слоев, добавление выпадающих слоев и нормализацию партии, я пытался использовать все эти методы, и это не дает мне более 98,89% точности проверки с 30 эпохами.
есть что-нибудь, что я ' пропустил или я что-то не так делаю?
from keras.models import Sequential
from keras.datasets import mnist
from keras.layers import Conv2D , MaxPooling2D , Dense , Flatten , Dropout
from keras.optimizers import SGD
from keras.optimizers import adam
from keras.layers.normalization import BatchNormalization
from keras.preprocessing.image import ImageDataGenerator
(x_train , y_train), (x_test, y_test) = mnist.load_data()
#PREPROCESSING IMAGE DATA
x_train = x_train / 255.0
x_test = x_test /255.0
x_train = x_train.reshape(60000,28,28,1)
x_test = x_test.reshape(10000,28,28,1)
model = Sequential()
# CONVOLVING IMAGES
model.add(Conv2D(filters=32, kernel_size=5 , input_shape=(28,28,1), activation="relu"))
model.add(MaxPooling2D(3,3))
model.add(Conv2D(filters=16 , kernel_size=3 , activation="relu"))
model.add(MaxPooling2D(3,3))
model.add(BatchNormalization())
model.add(Conv2D(filters=32, kernel_size=2 , activation="relu"))
model.add(Dropout(0.2))
model.add(Flatten())
#MAKING A NEURAL NETWORK
model.add(Dense(units=10 , activation="softmax"))
#COMPILING
#model.compile(optimizer=SGD(learning_rate=0.013 , momentum=0.89) , loss="sparse_categorical_crossentropy" , metrics=["accuracy"])
model.compile(optimizer=adam(learning_rate=0.00142 , beta_1=0.935 ,beta_2=0.999) ,loss= "sparse_categorical_crossentropy" , metrics=["accuracy"])
#model.compile(optimizer="adam",loss= "sparse_categorical_crossentropy" , metrics=["accuracy"])
#IMAGE AUGMENTATION AND TRAINING
# datagen = ImageDataGenerator(rotation_range=10 ,width_shift_range=0.15, height_shift_range=0.15 ,
# zoom_range=0.3, shear_range=0.15 )
#
# datagen.fit(x_train)
# model.fit_generator(datagen.flow(x_train , y_train ,batch_size=32) , steps_per_epoch=len(x_train)/60 , epochs=30 ,
# validation_data=(x_test, y_test))
# OR USE THE ONE BELOW WITH NO IMAGE AUGMENTATION
model.fit(x= x_train, y=y_train , epochs=30 , validation_data=(x_test,y_test) , batch_size=256)
# MODEL SUMMARY
model.summary()
# SAVING MODEL
model.save("mnist_test.h5")
print("MODEL SAVED")