Как вы получаете более высокую точность проверки в CNN? - PullRequest
0 голосов
/ 18 марта 2020

Хорошо, поэтому мне нужна точность проверки на 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")

...