0

我想创建自己的神经网络——主要是为了好玩,但也因为可汗学院不允许图书馆,而且我在网站上没有看到任何好的神经网络。

神经网络信息:

我在图片中展示的是一个 1-2-3-2-1 神经网络,尽管它对所有层的大小和数量都执行此操作。较粗的线是第一次训练运行,即 5,000 次迭代。较细的线显示第一次训练运行后的另外 1,000 次迭代。

训练数据信息:

我让它从 0 切换到 1 和 1 到 0。显示的图表是尝试将 1 更改为 0 时的损失。数据集如下所示:

[{
  inputs: [0],
  outputs: [1]
}, {
  inputs: [1],
  outputs: [0]
}]

在每次迭代之前,数据集是随机的。

我将一个神经网络放在一起,但在测试时遇到了一个有趣的问题:大约 3/4 的时间它会在 0.5 左右振荡。另外 1/4 的时间,它按预期工作。有时它会去它应该去的地方(大约四分之一的时间)(这些图显示了损失,中间的线是 0):

显示向 0 收敛的图像

另一部分时间(可能是 1/20,很少见),它会“坚持”在 0.5,但随后会自行退出: 在此处输入图像描述

或者它会做对,但随后会无缘无故地把自己搞砸(非常罕见,几乎从未发生过): 在此处输入图像描述

其余时间,它将保持在 0.5 左右: 在此处输入图像描述

我不知道是什么导致了这些发生(尽管我认为这可能是我在程序的第 137 行找到的梯度下降的实现),或者如何修复它们。您可以在此处找到该程序: khanacademy.org/cs /-/6305674778411008

4

1 回答 1

0

我认为这可能是过度拟合。神经网络达到最小值。但一段时间后,损失开始再次增长,并在当地分钟内停止。但这取决于你的神经网络是如何实现的。例如,您需要查看您的数据是否在 0 和 1 或 -1 和 1 之间进行了标准化。因为如果 o 数据未标准化,则梯度可能会“爆发”。标准化也很重要。

于 2018-09-26T20:32:19.040 回答