gpt4 book ai didi

python - 使用 MNIST 数据集训练的 NN 和 CNN 数字识别前的预处理

转载 作者:太空狗 更新时间:2023-10-29 21:58:29 25 4
gpt4 key购买 nike

我正在尝试通过使用 NN 和 CNN 对我自己和几个 friend 写的手写数字进行分类。为了训练 NN,使用了 MNIST 数据集。问题是用 MNIST 数据集训练的 NN 在我的数据集上没有给出令人满意的测试结果。我在 Python 和 MATLAB 上使用了一些具有不同设置的库,如下所列。

在 Python 上我使用了 this code有设置;

  • 3 层 NN,输入数量 = 784,隐藏神经元数量 = 30,输出数量 = 10
  • 代价函数=交叉熵
  • 时期数 = 30
  • 批量大小 = 10
  • 学习率 = 0.5

使用MNIST训练集进行训练,测试结果如下:

MNIST 测试结果 = 96%在我自己的数据集上的测试结果 = 80%

在 MATLAB 上我使用了 deep learning toolbox在各种设置下,包括归一化,与上述类似,NN 的最佳精度约为 75%。NN 和 CNN 都在 MATLAB 上使用。

我尝试将我自己的数据集与 MNIST 进行比较。上面的结果是从预处理的数据集中收集的。这是应用于我的数据集的预处理:

  • 每个数字都被单独裁剪并通过双三次插值调整为 28 x 28
  • 通过在 MATLAB 上使用边界框,路径以 MNIST 中的平均值为中心
  • 背景为 0,最高像素值为 1,与 MNIST 相同

我不知道还能做什么。仍然存在一些差异,如对比度等,但对比度增强试验无法提高准确性。

这里有一些来自 MNIST 的数字和我自己的数据集,可以直观地比较它们。

MNIST digits

my own dataset

如您所见,存在明显的对比度差异。我认为准确性问题是因为 MNIST 和我自己的数据集之间缺乏相似性。我该如何处理这个问题?

here中也有类似的问题,但他的数据集是打印数字的集合,与我的不同。

编辑:我还在使用二值化 MNIST 和默认 MNIST 训练的 NN 上测试了我自己的数据集的二值化版本。二值化阈值为0.05。

这是分别来自 MNIST 数据集和我自己的数据集的矩阵形式的示例图像。他们都是5。

MNIST:

  Columns 1 through 10

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0.1176 0.1412
0 0 0 0 0 0 0 0.1922 0.9333 0.9922
0 0 0 0 0 0 0 0.0706 0.8588 0.9922
0 0 0 0 0 0 0 0 0.3137 0.6118
0 0 0 0 0 0 0 0 0 0.0549
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0.0902 0.2588
0 0 0 0 0 0 0.0706 0.6706 0.8588 0.9922
0 0 0 0 0.2157 0.6745 0.8863 0.9922 0.9922 0.9922
0 0 0 0 0.5333 0.9922 0.9922 0.9922 0.8314 0.5294
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Columns 11 through 20

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0.0118 0.0706 0.0706 0.0706 0.4941 0.5333 0.6863 0.1020
0.3686 0.6039 0.6667 0.9922 0.9922 0.9922 0.9922 0.9922 0.8824 0.6745
0.9922 0.9922 0.9922 0.9922 0.9922 0.9922 0.9922 0.9843 0.3647 0.3216
0.9922 0.9922 0.9922 0.9922 0.7765 0.7137 0.9686 0.9451 0 0
0.4196 0.9922 0.9922 0.8039 0.0431 0 0.1686 0.6039 0 0
0.0039 0.6039 0.9922 0.3529 0 0 0 0 0 0
0 0.5451 0.9922 0.7451 0.0078 0 0 0 0 0
0 0.0431 0.7451 0.9922 0.2745 0 0 0 0 0
0 0 0.1373 0.9451 0.8824 0.6275 0.4235 0.0039 0 0
0 0 0 0.3176 0.9412 0.9922 0.9922 0.4667 0.0980 0
0 0 0 0 0.1765 0.7294 0.9922 0.9922 0.5882 0.1059
0 0 0 0 0 0.0627 0.3647 0.9882 0.9922 0.7333
0 0 0 0 0 0 0 0.9765 0.9922 0.9765
0 0 0 0 0.1804 0.5098 0.7176 0.9922 0.9922 0.8118
0 0 0.1529 0.5804 0.8980 0.9922 0.9922 0.9922 0.9804 0.7137
0.0941 0.4471 0.8667 0.9922 0.9922 0.9922 0.9922 0.7882 0.3059 0
0.8353 0.9922 0.9922 0.9922 0.9922 0.7765 0.3176 0.0078 0 0
0.9922 0.9922 0.9922 0.7647 0.3137 0.0353 0 0 0 0
0.9922 0.9569 0.5216 0.0431 0 0 0 0 0 0
0.5176 0.0627 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Columns 21 through 28

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0.6510 1.0000 0.9686 0.4980 0 0 0 0
0.9922 0.9490 0.7647 0.2510 0 0 0 0
0.3216 0.2196 0.1529 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0.2510 0 0 0 0 0 0 0
0.0078 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

我自己的数据集:

  Columns 1 through 10

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0.4000 0.5569
0 0 0 0 0 0 0 0 0.9961 0.9922
0 0 0 0 0 0 0 0 0.6745 0.9882
0 0 0 0 0 0 0 0 0.0824 0.8745
0 0 0 0 0 0 0 0 0 0.4784
0 0 0 0 0 0 0 0 0 0.4824
0 0 0 0 0 0 0 0 0.0824 0.8745
0 0 0 0 0 0 0 0.0824 0.8392 0.9922
0 0 0 0 0 0 0 0.2392 0.9922 0.6706
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0.4431 0.3608
0 0 0 0 0 0 0 0.3216 0.9922 0.5922
0 0 0 0 0 0 0 0.3216 1.0000 0.9922
0 0 0 0 0 0 0 0 0.2784 0.5922
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Columns 11 through 20

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0.2000 0.5176 0.8392 0.9922 0.9961 0.9922 0.7961 0.6353
0.7961 0.7961 0.9922 0.9882 0.9922 0.9882 0.5922 0.2745 0 0
0.9569 0.7961 0.5569 0.4000 0.3216 0 0 0 0 0
0.7961 0 0 0 0 0 0 0 0 0
0.9176 0.1176 0 0 0 0 0 0 0 0
0.9922 0.1961 0 0 0 0 0 0 0 0
0.9961 0.3569 0.2000 0.2000 0.2000 0.0392 0 0 0 0
0.9922 0.9882 0.9922 0.9882 0.9922 0.6745 0.3216 0 0 0
0.7961 0.6353 0.4000 0.4000 0.7961 0.8745 0.9961 0.9922 0.2000 0.0392
0 0 0 0 0 0.0784 0.4392 0.7529 0.9922 0.8314
0 0 0 0 0 0 0 0 0.4000 0.7961
0 0 0 0 0 0 0 0 0 0.0784
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.0824 0.4000 0.4000 0.7176
0.9176 0.5961 0.6000 0.7569 0.6784 0.9922 0.9961 0.9922 0.9961 0.8353
0.5922 0.9098 0.9922 0.8314 0.7529 0.5922 0.5137 0.1961 0.1961 0.0392
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Columns 21 through 28

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0.1608 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0.1608 0 0 0 0 0 0 0
0.9176 0.2000 0 0 0 0 0 0
0.8353 0.9098 0.3216 0 0 0 0 0
0.2431 0.7961 0.9176 0.4392 0 0 0 0
0 0.0784 0.8353 0.9882 0 0 0 0
0 0 0.6000 0.9922 0 0 0 0
0 0.1608 0.9137 0.8314 0 0 0 0
0.1216 0.6784 0.9569 0.1569 0 0 0 0
0.9137 0.8314 0.3176 0 0 0 0 0
0.5569 0.0784 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

最佳答案

因此,您要寻找的是一种标准化测试数据的通用方法,以便可以将其与 MNIST 训练数据进行比较。也许您可以先使用一种技术将 MNIST 训练数据规范化为标准格式,然后训练您的 CNN,然后使用相同的过程规范化您的测试数据,然后应用 CNN 进行识别。

你看过这篇论文吗?它使用基于矩的图像归一化。它是单词级别的,所以与您正在做的不完全一样,但应该很容易实现。

Moment-based Image Normalization for Handwritten Text Recognition (Kozielski 等人):

关于python - 使用 MNIST 数据集训练的 NN 和 CNN 数字识别前的预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com