Я сгенерировал набор данных с использованием EMNIST и математических символов, который имеет один символ на изображение или два символа на изображение. В наборе данных 72 возможных символа. Размер изображения 28x56 (hxw).
Пример: - один символ двойной символ
Существует 5256 (72 * 73) возможных классов с учетом всех комбинаций символов. Это из 72 возможных символов в первой части и 73 возможных символов (включая пробел) во второй части этикетки. Я удостоверился, что у каждого класса есть приблизительно 540-600 изображений. Всего набор данных содержит около 3 миллионов изображений.
Модели CNN, которые я пробовал:
input_shape = (28, 56, 1)
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3, 3), padding='same', use_bias=False,
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(.2))
model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', use_bias=False))
model.add(Activation('relu'))
model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(.2))
model.add(Conv2D(filters=128, kernel_size=(3, 3), padding='same', use_bias=False))
model.add(Activation('relu'))
model.add(Conv2D(filters=128, kernel_size=(3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(.3))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(4096, activation='relu'))
model.add(Dense(units=5256, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['sparse_categorical_accuracy'])
Я даже пробовал модель с двумя плотными слоями из 10512 единиц. Я смог достичь точности только около 66%. Я пробовал разные размеры пакетов из 32, 64, 256 и ADAM-оптимизатора с различной скоростью обучения. Было бы замечательно, если бы кто-то мог указать на то, что я делаю здесь неправильно, или дать несколько советов по повышению точности.