Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的神经网络忘记了它学到的东西?_C#_Neural Network - Fatal编程技术网

C# 为什么我的神经网络忘记了它学到的东西?

C# 为什么我的神经网络忘记了它学到的东西?,c#,neural-network,C#,Neural Network,我从另一个网站复制了C#中的一些源代码,并用几个输入和两个输出以及一个由4个组成的隐藏层自行测试了神经网络 当神经网络根据字母的预期输出进行训练时,无论是a、B还是C(其格式为16×16像素的单调图像),都是126字节。 我将图像的文字字节转换成字节数组,然后将它们转换成一个双精度数组,然后将整个双精度数组作为输入输入输入到神经网络中,然后给它预期的输出。 它只需一个字母就可以训练 当我通过其他字母训练它时,它似乎调整了它的重量,使它“忘记”它学习的其他字母 我怎样才能得到它,这样重量就不会被写

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

当神经网络根据字母的预期输出进行训练时,无论是a、B还是C(其格式为16×16像素的单调图像),都是126字节。 我将图像的文字字节转换成字节数组,然后将它们转换成一个双精度数组,然后将整个双精度数组作为输入输入输入到神经网络中,然后给它预期的输出。 它只需一个字母就可以训练

当我通过其他字母训练它时,它似乎调整了它的重量,使它“忘记”它学习的其他字母

我怎样才能得到它,这样重量就不会被写过? 我只是给出了错误的预期值吗

这是代码,请注意,它来自另一个源代码,但我已经对其进行了大量修改。我所做的一件事是编写train函数和test函数,以便更容易地使用这部分代码

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

字母B应分别在输出中的第二个神经元上输出0.99的大致值。 其余输出应为0.25

以下是完整的源代码: 它不允许我将代码放入其中,因为我的消息正文超过33000个字符。 无论如何 基本上,我添加的部分是图像加载函数、图像到字节数组函数以及所有这些奇特的功能。 我正在(大量)修改已经存在的神经网络代码示例。 幸运的是,给出的示例是如此模块化,我根本不需要更改支持网络的类。我只是在添加自己的结构作为网络的一种形式时遇到了问题。 因此,非常感谢您的帮助,我非常希望这个网络能够保存它所学到的不同信息


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

最可能的原因是你没有用所有数据模式同时训练网络(以字母为例)。通常,整个训练数据集都会反馈到网络中,这个过程会重复多次,直到整个数据集的回答错误达到所需的水平

当你多次只呈现一个字母时——网络只学习它,其他什么都不学习。当你开始用另一个字母训练网络时——它会修改权重来学习新字母。但是以前的数据正在逐渐被遗忘


你的4个神经元组成的隐藏层足以容纳3个字母模式。因此,这并不是你失败的原因。

我认为这个问题在这里回答起来太笼统了。尽管神经网络是一个非常有趣的话题。同意。如果被迫猜测,我会假设“隐藏层”只是不够大,无法学习所有的字母。只是猜测而已……这可能是因为,鉴于这个神经网络的规模很小,你只是对每个字母一个接一个地进行了太多的迭代。也许你应该让它在同一时间学习多个东西,而不是一次学习一个东西,它将改变它“存储”的方式重量?比我快20秒:)但我同意,他一次重复一个字母,通常不是这样的