【问题标题】:lack of understanding cnn result and utility缺乏对 cnn 结果和效用的理解
【发布时间】:2019-08-22 16:50:01
【问题描述】:

我正在研究深度学习,我想我迷失在 cnn 中。让我解释一下:通过关注Aurélien Géron's github(在单元格 [21] 中),我训练了“我的基本”MNIST。一切都很顺利......我想...... ^^......我也使用了他的初始化......:

....
8 上批精度:1.0 测试精度:0.9852,
9 上批准确率:1.0 测试准确率:0.9892,

然而,在同一作者的书中,它指定:“......一旦 CNN 学会在一个位置识别一种模式,它就可以在任何其他位置识别它......”(第 358 页) .这是否意味着如果我的网络检测到 99% 的数字,我就可以将它移动到它识别的任何地方?我问这个,因为它不起作用。预测非常糟糕,即在 28x28 图像上 100% 检测到“4”:

...
3 : 0.0 %
4 : 100.0 %
5 : 0.0 %
...

在同一张图像上,我移动了几个像素的形状(用油漆,对于那些想知道如何的人):

0 : 20.0 %
1 : 21.0 %
2 : 2.0 %
3 : 0.0 %
4 : 22.0 %
5 : 14.0 %
6 : 0.0 %
7 : 21.0 %
8 : 1.0 %
9 : 0.0 %

我真的理解 cnn 的概念吗?
此外,如果我将“4”和“2”并排放置,为什么它不起作用? 网络不应该 100% 告诉我吗?

我的import_graph 代码:

saver = tf.train.import_meta_graph("./my_mnist_model.meta")  
X_prod = snt_X_prod.astype(np.float32).reshape(-1, 28*28) / 255.0 
sess = tf.Session()
saver.restore(sess, "./my_mnist_model")
result = sess.run("output/Y_proba:0", feed_dict={"inputs/X:0": X_prod})

【问题讨论】:

    标签: python tensorflow conv-neural-network mnist


    【解决方案1】:

    事情没有那么简单。卷积确实在某种意义上对图像的翻译是不变的,但是您使用的神经网络不仅仅是一个卷积层,从我在笔记本中看到的,它包含两个卷积层、最大池化、全连接和输出层。全连接层和输出层自然不是翻译不变的,因此整个网络不是翻译不变的。当您移动输入图像并将其馈送到网络时,第二个卷积层的输出将与原始图像相同,只是相应地进行了翻译,但是,完全连接的层被训练为“预期”一些激活分布在卷积层中,通过手动翻译图像,您可能提供的示例与训练示例差异太大,从而导致分类失败。

    对于第二点,4 和 2 并排不起作用,因为网络没有针对数字对进行训练。与前一种情况一样,当您在单个图像中向网络呈现 4 和 2 时,卷积层的输出将与训练期间发生的非常不同,因此网络不会给您一个有意义的答案。

    此外,网络在顶部有一个 softmax 层,所以实际上它不能在两个类上同时给你 100%,所有概率的总和总是 100%。 p>

    我建议尝试更深入地了解神经网络中实际发生的事情以及它是如何优化的。一旦你掌握了所涉及的一些巧妙的数学知识,你就会看到问题的答案。模型不是总能给你正确答案的魔法盒。为此,我推荐 Andrej Karpathy 的斯坦福 CNN 课程。如果您遵循这一点,您将对正在发生的事情有真正的、非肤浅的了解。

    如果您想要一个在翻译数字上效果很好的模型,您可以使用更大的图像,例如40x40,然后将原始 28x28 图像放到一个随机位置并在此基础上训练您的网络。那么你应该有一个模型,无论你把它放在哪里,它都能识别数字。

    如果您想要一个可以识别多个数字的模型,请创建一个数据集,其中包含具有多个数字的图像示例,并为每个样本使用多个标签(为此,您将不得不停止使用 softmax 并使用 sigmoid,可能与 MSE 一起使用而是错误)。那么你应该有一个可以同时识别多个数字的模型。

    【讨论】:

    • 感谢您的回复。的确,我没看懂卷积的意思 而且,事后看来和你的回答,很多问题都来找我了(你不需要回答):为什么是32然后是64卡?为什么是 64 个隐藏层而不是我?等等....从一开始,我是自学的,但现在,我意识到我需要与这方面更有经验的人讨论。我将尝试查找对 Karpathy 课程的引用并寻找论坛。无论如何,对于 MNIST,我现在明白这是一个 ML 的“hello world”,而这本书是一个预尝,旨在让我们抢占先机。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2016-08-20
    • 2013-12-03
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多