如何用神经网络定义问题

时间:2016-12-03 16:34:21

标签: python machine-learning computer-vision neural-network

我已经构建了一个神经网络可以改变大小(隐藏层的数量和大小等)的系统。当以0.5的学习率训练它时,1个隐藏的4个神经元层,2个输入和1个输出,它成功地学习了XOR和AND问题(二进制输入等)。工作得很好。

当我然后制作结构784输入,1个隐藏层的30个神经元和10个输出,并应用MNIST数字集,其中每个输入是一个像素值,我根本无法获得好的结果(不比随机更好! )。我的问题基于理论:如果我的代码看起来似乎与其他问题一起工作,我是否应该假设我需要继续尝试不同的学习率,隐藏层等等?或者应该决定一个更根本的问题?

如何找到正确的图层组合,学习率等?你会怎么做?

测试也很困难,因为它需要大约2个小时才能到达应该学习的地方......(在Mac上)

不,我没有使用TensorFlow或其他库,因为我正在挑战自己。无论哪种方式,它确实有效......到了一定程度!

非常感谢。并为这个稍微抽象的问题道歉 - 但我知道很多初学者都有这个问题 - 所以我希望它也有助于其他人。

2 个答案:

答案 0 :(得分:0)

快速建议可能是解决中间任务(例如使用您自己的5x5 ASCII"图片和#34;数字),在隐藏层中拥有更多神经元,以减少数据集以便更快地进行模拟,将您的实现与编程语言中的其他自定义实现进行比较。

答案 1 :(得分:0)

你创建自己的程序是件好事。我建议你继续尝试基本问题,例如通过添加更多隐藏层来绘制MNIST,使用不同的学习速率绘制训练迭代的损失变化等等。

一般而言,当网络权重是随机的时,学习率最初不应保持较高,并且在训练期间保持降低学习率是一种好习惯。在w.r.t训练迭代中绘制损失或误差函数的值将为您提供有关此问题的良好见解。如果学习率非常高,损失将会波动并且变化太大。如果学习率非常小,那么随着训练迭代,损失将会非常缓慢地减少。如果您有兴趣,可以在Andrew Ng的课程或一些博客中阅读。

关于隐藏层和神经元数量的问题,最好先开始尝试较低的数字,例如1个隐藏层和30个神经元。在您的下一个实验中,您可以拥有2个隐藏层,但是,跟踪与您拥有的训练样本相比的学习参数(权重和偏差)的数量,因为具有大量网络参数的小型训练样本可能会过度适应您的网络。

在尝试了一些小问题之后,您可以尝试使用某些框架进行相同的操作,让我们说Tensorflow,之后您可以尝试更具挑战性的问题。