【发布时间】:2020-02-08 16:29:11
【问题描述】:
我使用 EMNIST 和数学符号生成了一个数据集,每个图像一个字符或每个图像两个字符。数据集中有 72 个可能的字符。图像尺寸为 28x56(hxw)。
例如:- single character double character
考虑到所有字符组合,有 5256 (72*73) 个可能的类。这是来自标签第一部分中的 72 个可能字符和标签第二部分中的 73 个可能字符(包括空白)。我确保每个班级有大约 540-600 张图像。整个数据集大约有 300 万张图像。
我尝试过的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 单元的 Dense 层的模型。我只能达到大约 66% 的准确率。我尝试了 32,64,256 和 ADAM 优化器中的各种批量大小以及各种学习率。如果有人能指出我在这里做错了什么,那就太好了。或者提供一些提高准确性的提示。
【问题讨论】:
-
1) 给出该过程的更多细节:预处理、训练参数、训练日志。 2)对于简单的 EMNIST 来说,66% 可能很低,但你在这里处理很多类。 3) 尝试使用其中一个预训练网络,然后重新训练最后 1-2 层。 4)查看混淆矩阵。看看某些课程是否更难正确学习。
-
图像为二进制格式 (0,255),并在输入网络之前进行标准化。笔记本可以找到-大网-colab.research.google.com/drive/…小网-colab.research.google.com/drive/…
标签: deep-learning conv-neural-network