为什么model.predict()不能在新的类似MNIST的输入上运行良好?

时间:2017-12-13 18:30:34

标签: machine-learning keras mnist

我是一位经验丰富的开发人员,是机器学习的新手。我尝试使用Keras / TensorFlow,从mnist_mlp.py示例开始。我在Mac上使用pip安装了Keras和TensorFlow。

为了更好地理解内部工作原理,我不是运行文件(' python mnist_mlp.py'),而是将文件内容剪切并粘贴到Python(2.7.12)中互动窗口。

一切运行正常,我得到98.4%的测试准确度,如该文件的评论中所述。

我接下来要做的是为它提供新颖的输入并使用model.predict()来查看它的表现。我在GIMP中创建28x28图像并将它们带入我的Python会话(小心地将4通道,8位RGBA图像转换为线性单通道浮点阵列)。

当我把它喂入模型时,我得到的结果看起来很奇怪。有些图像被正确分类,而其他图像则完全偏离。 它们看起来对我来说是完全合理的数字,并且它们非常接近地匹配MNIST集合示例。当我将数组提取出来并查看它看起来没问题时,它似乎不是一个翻转或翻转的问题。当我以相同的方式提供MNIST图像时,它们似乎正常工作。

我不确定这里发生了什么。这是过度拟合的情况吗?为什么验证数据集与测试集相同?

可以在此处找到带有说明的测试图像和python代码: https://s3.amazonaws.com/stackoverflow-47799896/StackOverflow_47799896.zip

感谢。

编辑:我尝试使用convnet示例(mnist_cnn.py)进行相同的测试,结果稍微好一点,但仍有类似的错误。如果有人想尝试,他们可以在readme.py文件中使用相同的函数,但进行这些更改:

import numpy as np
x = np.ndarray((1,28,28,1), dtype='float32')

def l (s):
    with open(s, 'rb') as fd:
        _ = fd.read(1)
        for i in xrange(28):
            for j in xrange(28):
                v = ord(fd.read(1))
                x[0][i][j][0] = v / 255.0
                _ = fd.read(3)

编辑2:有趣的是,如果我用MLP案例中的我的图像替换训练数据集中的前19项(60,000中),我会在训练后得到或接近完美预测我的所有图像。这是否表明过度拟合?

0 个答案:

没有答案