首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的神经网络训练的MNIST数据集不能正确预测7和9?

为什么我的神经网络训练的MNIST数据集不能正确预测7和9?
EN

Stack Overflow用户
提问于 2015-09-14 12:56:46
回答 2查看 1.9K关注 0票数 2

我正在使用Matlab ( github代码库 )。该网络的详细情况如下:

  • 隐藏单位: 100 (变量)
  • 时代: 500
  • 批次大小: 100

权重正在使用反向传播算法进行更新。

我能认出我在photoshop画的0,1,2,3,4,5,6,8。

然而,7,9没有被识别,但是在测试集上运行时,我只得到了749/10000错误,它正确地分类了9251/10000。

知道有什么不对劲吗?因为它是学习的,基于测试集的结果,它的学习是正确的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-14 13:33:37

在您的代码中,我没有看到任何完全不正确的地方,但是还有很多可以改进的地方:

  1. 您可以使用它来设置初始权重: hiddenWeights = rand(hiddenUnits,inputVectorSize);outputWeights = rand(outputVectorSize,hiddenUnits);hiddenWeights = hiddenWeights./size(hiddenWeights,2);outputWeights = outputWeights./size(outputWeights,2); 我想这会使你的体重变得很小。不仅如此,你将没有负值,所以你会扔掉乙状结肠范围的一半值。我建议你试试: 权重=2*兰特(x,y) -1 在[-1, 1]中产生随机数。然后,您可以尝试将此间隔除以获得较小的权重(尝试将其除以大小的sqrt )。
  2. 您可以将它用作输出增量: outputDelta = dactivation(outputActualInput).*(outputVector - targetVector) %(tk-yk)*f‘(阴) 如果使用平方损失函数,则乘以导数。对于日志丢失(通常用于分类),您应该只使用outputVector - targetVector。它可能不会有那么大的区别,但你可能想试试。
  3. 你在评论中说,网络不会检测到你自己的七和九。这可能意味着对MNIST数据的过度拟合。要解决这个问题,您需要添加某种形式的正则化到您的网络:重量衰减或辍学。
  4. 你也应该尝试不同的学习速度,如果你还没有。
  5. 你似乎没有任何偏见神经元。每个层,除了输出层,都应该有一个只将值1返回到下一层的神经元。您可以通过向输入数据添加另一个始终是1的特性来实现这一点。

MNIST是一个大的数据集,更好的算法仍在研究中。你的网络很基本,很小,没有正则化,没有偏置神经元,也没有对经典梯度下降的改进。这并不奇怪,它的工作不太好:您可能需要一个更复杂的网络,以获得更好的结果。

票数 2
EN

Stack Overflow用户

发布于 2016-04-28 16:23:11

与神经网络或您的代码无关,但是这张KNN最近的数字的图片显示,一些MNIST数字很难识别:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32565438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档