machine-learning - 如何判断一个神经网络?

标签 machine-learning neural-network backpropagation

我写了一个神经网络, 它主要基于(错误修复)来自 James McCaffrey https://visualstudiomagazine.com/articles/2015/04/01/back-propagation-using-c.aspx 的神经网络我使用他的代码遇到了各种 Git 项目和书籍 当他为 MS 研究工作时,我认为他的工作会很好,也许不是最重要的(它不是在 cuda 之上运行的),但它的代码我可以阅读,尽管我不喜欢科学方面它。他的样本处理的数据集与我的问题非常相似。

我的目标是解决一些图像分类问题(基于像素信息的数据集) 这个问题并不容易重现,但我设法创建了一个包含 50 个好的场景和 50 个坏的场景的数据集。当在散点图中绘制测量值时,两组都有很多模糊的边界重叠。我自己无法从中做出一些东西,它对我来说太模糊了。由于每个样本有 5 个输入,我想知道神经网络是否能够找到内部关系并解决我的模糊数据分类问题。

好吧,确实如此..好吧,我猜。
取决于权重的播种(我达到了 80%)、节点数量和学习时间;我获得的训练分数约为 90% 到 85%,最近为 95%

首先,我尝试了权重的随机初始化。 然后我研究了节点的数量。 我使用了学习率、动量和权重衰减。 他们的得分从(得分 85% 到 90%):

// as in the example code i used
int maxEpochs = 100000;
double learnRate = 0.05;
double momentum = 0.01;
double weightDecay = 0.0001;

至(得分 95%)

int maxEpochs = 100000;
double learnRate = 0.02;  //had a huge effect
double momentum = 0.01;
double weightDecay = 0.001; //had a huge effect

令我有点惊讶的是,与更改网络的随机初始化和更改上述常量相比,节点数量的影响较小。

但这让我感到好奇。

  • 作为一般经验法则,95% 就是高分? (不确定限制在哪里,但我认为这也取决于数据集,虽然我对 95% 感到惊讶,但我想知道是否可以将其调整到 97%。
  • 隐藏节点的数量,我应该尽量减少它们吗? 目前它是 5:9:3,但我曾经使用 5:6:3 网络得到过类似的分数。
  • 神经网络通过改变初始随机种子权重(不同的起始种子)来获得模型而产生很大的评分影响是正常的吗?因为我认为训练会克服开始时的情况。

最佳答案

首先,抱歉,如果我没理解正确,但看起来您有 100 个训练示例,但没有验证/测试集。这对于训练集来说相当小,这使得神经网络很容易对其进行过度训练。你似乎也选择了一个小的神经网络,所以也许你实际上并没有过度拟合。最好的检查方法是拥有一个测试集。

关于你的问题:

  • 什么是“好成绩”完全取决于您的问题。例如,在 MNIST(广泛使用的数字识别数据集)上,这会被认为是非常糟糕的,最好的分数高于 99.7%(并且使用 ConvNet 获得 99% 并不难),但在 ImageNet 上,这会很棒。了解自己是否优秀的一个好方法是以某种方式与人类表现进行比较。达到它通常很困难,所以稍微低于它是好的,高于它是非常好的,远低于它是不好的。同样,这是主观的,取决于您的问题。

  • 您绝对应该尝试最小化隐藏节点的数量,遵循奥卡姆拉索规则:在多种模型中,最简单的就是最好的。它有两个主要优点:运行速度更快,泛化能力更好(如果两个模型在训练集上表现相似,那么最简单的模型最有可能在新的测试集上表现更好)。

  • 已知初始化会极大地改变结果。然而,不同的初始化方法之间存在很大的差异:常量/简单随机(广泛使用,通常(截断)正态分布)/更聪明的随机(例如 Xavier 初始化)/“更聪明”的初始化(预先计算的特征等) . 比较难用)。在以完全相同的方式生成的两个随机初始化之间,性能差异不应该那么大。我的猜测是,在某些情况下,您只是没有训练足够长的时间(正确训练所需的时间可能会根据初始化而发生很大变化)。我的另一个猜测是,数据集和网络的规模较小,使得评估比通常情况更依赖于初始权重。

学习率和权重衰减对结果造成很大影响是正常的,但是有效地找到这些值的最佳值可能很困难。

关于machine-learning - 如何判断一个神经网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44129813/

相关文章:

algorithm - 推导字符串转换规则

python - 具有两个神经元的神经网络

image - 小数据的最佳监督学习算法

python - 计算损失相对于层输入的偏导数 |链式法则 | Python

machine-learning - 选择监督学习算法或无监督学习算法

matlab - 在 MATLAB 中创建简单神经网络时的困惑

python - Pytorch 预期为 1D 张量,但得到了 2D 张量

python - Tensorflow Inception v3 再训练 - 将文本/标签附加到单个图像

neural-network - 使用反向传播来逼近函数然后找到其最大值?