尝试使用前馈网络解决光学字符识别任务

人工智能 前馈神经网络 光学字符识别
2021-11-17 01:44:10

我正在对神经网络进行一些实验,为此我正在尝试编写一个简单的OCR任务。我知道 CNN 是最好的选择,但是由于我的经验不足,我想一步一步地从前馈网络开始。

所以我的训练数据是一组大约 400 个 16*16 的图像,这些图像是从一个脚本中提取的,该脚本将每个字母字符绘制在一个小图像中,用于在我的计算机中注册的一小组字体。

然后测试数据集是从相同的过程中提取的,但针对的是我电脑中的所有字体。

嗯,结果很糟糕。获得大约的准确性。45-50%,非常差……但这不是我的问题。

关键是,无论我对网络应用什么隐藏层分布,我都无法获得低于 0.0049 的 MSE。我尝试了几种架构,都归结为这个数字。这是否意味着网络无法根据数据进一步学习?

然而,这个 MSE 值也会产生这种糟糕的结果。

我直接使用 Tensorflow API,没有 keras 或估计器,对于 62 个可识别字符的列表,这些是我使用过的架构示例:[256,1860,62] [256,130,62] [256,256, 128,62] [256 ,3600,62] ....

但是永远不要让 MSE 低于 0.0049,结果仍然没有超过 50%。

非常感谢任何提示。

1个回答

因此,训练数据是从一小组字体中提取的少量示例(400),而测试数据是从更大的字体集中提取的更大的数据集,因此比训练数据更具可变性。这里的两个问题是训练数据量小以及训练和测试数据之间的分布差异。我会尝试以下方法:

  • 与其定义自己的架构,不如尝试 Keras 中可用的一些预训练架构,例如 ResNet50 或 VGG16。您可以使用随机权重或 imagenet 权重来启动它们。删除顶层并放置您自己的图层。您还可以有选择地解冻图层,看看是否有什么不同。
  • 为了解决我上面提到的问题,使用数据增强将可变性引入训练集。

你也没有在帖子中提到你是如何决定停止训练网络的。如果网络过度拟合,您可以尝试提前完成训练。