【问题标题】:Low accuracy of a Deep CNNDeep CNN 的低准确率
【发布时间】: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


【解决方案1】:

根据 Ruslan S. 的建议,我在 Resnet50 上训练了模型(重新训练了整个网络,而不仅仅是最后一层)。我能够显着提高准确性。我能够达到大约 96% 的准确率。

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2020-04-07
    • 2019-07-15
    • 2018-09-18
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多