为什么我的神经网络忘掉它所学到的东西?

时间:2015-04-10 11:47:55

标签: c# neural-network

我在C#中复制了一些源代码,来自另一个网站并仅使用少量输入和两个输出以及由4组成的隐藏层自行测试神经网络。

当神经网络接受一个字母的预期输出训练时,可以是A或B或C(格式为由16乘16像素组成的单调图像) - 它组成126个字节。 我将图像的文字字节转换为字节数组,然后将它们转换为double,并将整个双数组作为输入提供给神经网络,并给它预期的输出。 它只用一个字母训练。

当我通过其他字母训练它时,它似乎以某种方式调整它的重量,使其“忘记”它学到的其他字母。

我怎样才能让重量不会被重写? 我只是给它错误的期望值吗?

这是代码,请注意它来自其他来源,但我已经对其进行了大量修改。我做的一件事是编写火车功能以及测试功能,以便我可以更轻松地访问使用该部分代码。

字母A应该在输出中的第一个神经元上输出一个0.99的值。 其余的输出应该是0.25

字母B分别应该在输出中的SECOND神经元上输出大约0.99的值。 其余的输出应该是0.25

以下是完整的源代码:http://pastebin.com/0E3WM42W 它不会让我把代码放到这里因为我拥有的消息体超过33,000个字符。 无论如何 基本上我添加的部分是图像加载函数,图像到字节数组函数以及所有那些花哨的东西。 我正在(严重地)修改已经存在的神经网络代码示例。 幸运的是,给出的示例是如此模块化我没有必要改变支持网络的类我只是在添加我自己的结构作为网络的形式时遇到问题。 所以任何帮助都表示赞赏我真的很喜欢这个网络能够保存它学到的不同信息。

我不知道这是不是我做错了,或者我使用的神经网络是不是支持同时学习多种东西(它似乎不太适合提供各种各样的东西)输出!!这是肯定的)

1 个答案:

答案 0 :(得分:2)

最可能的原因是您没有同时使用所有数据模式(在您的情况下为字母)训练网络。通常,整套训练数据被送到网络,这个过程重复多次,直到整个数据集的答案错误达到所需的水平。

当你只多次出现一个字母时 - 网络只学习它,而不是其他任何东西。当您开始使用另一个字母训练网络时 - 它会修改权重以学习新字母。但之前的数据逐渐被遗忘。

你隐藏的4个神经元层对于3个字母的模式来说已经足够了。所以,这不是你失败的原因。