我在C#中使用NeuronDotNet用于神经网络.为了测试网络(以及训练它),我编写了自己的函数来得到平方误差.但是,当我通过在训练数据上运行它并将其与Backpropagation网络的MeanSquaredError进行比较来测试此函数时,结果是不同的.
我发现不同错误的原因是当我在学习阶段运行时,网络返回不同的输出.我使用以下命令为每个TrainingSample运行它:
double[] output = xorNetwork.Run(sample.InputVector);
Run Code Online (Sandbox Code Playgroud)
在学习阶段,它使用:
xorNetwork.Learn(trainingSet, cycles);
Run Code Online (Sandbox Code Playgroud)
...使用委托来捕获最终样本事件:
xorNetwork.EndSampleEvent +=
delegate(object network, TrainingSampleEventArgs args)
{
double[] test = xorNetwork.OutputLayer.GetOutput();
debug.addSampleOutput(test);
};
Run Code Online (Sandbox Code Playgroud)
我尝试使用XOR问题,保持简单,输出仍然不同.例如,在第一个纪元结束时,EndSampleEvent委托的输出与我的函数的输出是:
它不像在时代的不同阶段被捕获那么简单,输出与下一个/上一个时期的输出不同.
我已经尝试过调试,但我不是Visual Studio的专家,而且我正在努力解决这个问题.我的项目引用了NeuronDotNet DLL.当我将断点放入我的代码时,它不会进入DLL的代码.我已经在其他地方寻求过这方面的建议并尝试了几种解决方案而无处可去.
我不认为它是由于'观察者效应',即我的函数中的Run方法导致网络改变.我检查了代码(在制作DLL的项目中),我不认为Run会改变任何权重.我的函数中的错误往往比EndSampleEvent中的错误要低一个因子,该因子超过了典型时期的错误减少,即它就好像网络在我的代码中暂时超越自身(就训练而言).
神经网络在训练期间调整其功能的意义上是随机的.但是,输出应该是确定性的.为什么两组输出不同?
编辑:这是我正在使用的代码.
/***********************************************************************************************
COPYRIGHT 2008 Vijeth D
This file is part of NeuronDotNet XOR Sample.
(Project Website : http://neurondotnet.freehostia.com)
NeuronDotNet is a free software. You can redistribute it and/or modify it under the terms of
the GNU General Public …Run Code Online (Sandbox Code Playgroud) 一个List然后为什么代码(下面)编译?当然MyClass2应该回归List<Integer>?
public class Main {
public static void main(final String[] args) {
MyClass myClass = new MyClass();
List list = myClass.getList();
System.out.println(list);
System.out.println(list.get(0).getClass());
MyClass2 myClass2 = new MyClass2();
List list2 = myClass2.getList();
System.out.println(list2);
System.out.println(list2.get(0).getClass());
}
public interface Int1 {
public List getList();
}
public interface Int2 extends Int1 {
@Override
public List<Integer> getList();
}
public static class MyClass implements Int2 {
@Override
public List<Integer> getList() {
return Arrays.asList(1, 2, 3);
}
}
public static class MyClass2 …Run Code Online (Sandbox Code Playgroud) 我有一个我在Visual Studio中创建的表单,并且有一些控件在那里有奇怪的名称,这些名称都有与之关联的事件.我认为控件添加错误.它们是标签.我不能在表格上看到它们,它们必须没有文字或背后的东西.我怎么才能找到它们?
相当多的数据库脚本具有以下形式:
IF NOT EXISTS(SELECT * FROM Countries WHERE Name = 'France')
INSERT INTO(Countries)
Run Code Online (Sandbox Code Playgroud)
但是,我也看到人们这样做:
IF NOT EXISTS(SELECT CountryID FROM Countries WHERE Name = 'France')
INSERT INTO(Countries)
Run Code Online (Sandbox Code Playgroud)
乃至:
IF NOT EXISTS(SELECT 1 FROM Countries WHERE Name = 'France')
INSERT INTO(Countries)
Run Code Online (Sandbox Code Playgroud)
最后一个的优点是它更有效:查询实际上并没有使用子查询中的任何列,因此可能更快地不将它们中的任何一个带回来.但它看起来很奇怪,所以它让我觉得它可能让一些人感到困惑.它对实际执行时间有什么影响吗?