Neural network Elman网络-负值和大于1的计算值
我规范化了数据,但在使用encog Elman模式计算新数据时,仍然得到负值和大于1的值 即使按原样运行ElmanXOR示例: 图层:1个输入,5个隐藏,1个输出 激活:激活乙状体 培训:LevenbergMarquardt培训: A.贪心的 B杂交策略->神经模拟退火Neural network Elman网络-负值和大于1的计算值,neural-network,encog,Neural Network,Encog,我规范化了数据,但在使用encog Elman模式计算新数据时,仍然得到负值和大于1的值 即使按原样运行ElmanXOR示例: 图层:1个输入,5个隐藏,1个输出 激活:激活乙状体 培训:LevenbergMarquardt培训: A.贪心的 B杂交策略->神经模拟退火 有可能吗?如果您使用的是Encog的Sigmoid激活函数,您应该只获得0到1之间的输出值,因为这是输出函数所能实现的全部功能(您确定您的输出节点没有使用线性激活函数吗?)。不可能获得高于1或低于-1的值 (来源:) 我想知道
有可能吗?如果您使用的是Encog的Sigmoid激活函数,您应该只获得0到1之间的输出值,因为这是输出函数所能实现的全部功能(您确定您的输出节点没有使用线性激活函数吗?)。不可能获得高于1或低于-1的值
(来源:) 我想知道你的数据是否没有正确地标准化(你能上传标准化数据的样本吗?) 当你正常化时,我假设你做了这样的事情:
var analyst = new EncogAnalyst();
var wizard = new AnalystWizard(analyst);
wizard.Wizard(DataFile, true, AnalystFileFormat.DecpntComma);
这将规范化-1和1之间的数据。我认为您应该尝试添加此代码以将所有内容规范化为0到1之间
foreach (AnalystField field in analyst.Script.Normalize.NormalizedFields)
{
field.NormalizedHigh = 1.0;
field.NormalizedLow = 0.0;
}
或者,您也可以尝试不同的激活函数,如HyperbolicTangent,因为它的输出介于-1和1之间。如果您使用的是Encog的Sigmoid激活函数,您应该只获得介于0和1之间的输出值,因为这是输出函数所能实现的全部功能(您确定输出节点未使用线性激活函数吗?)。不可能获得大于1或小于-1的值
Neural Network Results:
input: 1 ,ideal=0 actual: 0.625124775182661
input: 0 ,ideal=1 actual: -0.476592365362806
input: 1 ,ideal=0 actual: -0.0206919867584277
input: 0 ,ideal=0 actual: 1.35539859989167
input: 0 ,ideal=0 actual: -0.387613018442168
input: 0 ,ideal=0 actual: -0.819489650390268
input: 0 ,ideal=1 actual: 1.2046874965753
input: 1 ,ideal=1 actual: 0.870695301738905
input: 1 ,ideal=1 actual: 0.159201074403962
input: 1 ,ideal=1 actual: 0.884482632556325
(来源:) 我想知道你的数据是否没有正确地标准化(你能上传标准化数据的样本吗?) 当你正常化时,我假设你做了这样的事情:
var analyst = new EncogAnalyst();
var wizard = new AnalystWizard(analyst);
wizard.Wizard(DataFile, true, AnalystFileFormat.DecpntComma);
这将规范化介于-1和1之间的数据。我认为您应该尝试添加此代码,将所有内容规范化为介于0和1之间
foreach (AnalystField field in analyst.Script.Normalize.NormalizedFields)
{
field.NormalizedHigh = 1.0;
field.NormalizedLow = 0.0;
}
或者,你可以尝试不同的激活函数,比如HyperbolicTangent,因为它的输出介于-1和1之间。Ya,我知道,这就是为什么我觉得奇怪的原因。我甚至从GitHub-ElmanXOR运行了encog的原始示例,并添加了一个计算循环:foreach(训练集中的IMLDataPair对){IMLData output=elmanNetwork.Compute(pair.Input);Console.WriteLine(“输入:{0}或输出:{1}预测:{2}”,pair.Input[0],pair.Ideal[0],输出[0]);}嗨,格雷格,你看到了吗?这有意义吗?是的,我知道,这就是为什么我觉得奇怪。我甚至从GitHub-ElmanXOR运行了Encode的原始示例,并添加了一个计算循环:foreach(训练集中的IMLDataPair对){IMLData output=elmanNetwork.compute(pair.Input);Console.WriteLine(“Input:{0}”原始输出:{1}预测:{2},pair.Input[0],pair.Ideal[0],output[0]);}嗨,格雷格,你看到了吗?它有意义吗?
Neural Network Results:
input: 1 ,ideal=0 actual: 0.625124775182661
input: 0 ,ideal=1 actual: -0.476592365362806
input: 1 ,ideal=0 actual: -0.0206919867584277
input: 0 ,ideal=0 actual: 1.35539859989167
input: 0 ,ideal=0 actual: -0.387613018442168
input: 0 ,ideal=0 actual: -0.819489650390268
input: 0 ,ideal=1 actual: 1.2046874965753
input: 1 ,ideal=1 actual: 0.870695301738905
input: 1 ,ideal=1 actual: 0.159201074403962
input: 1 ,ideal=1 actual: 0.884482632556325