Neural network Elman网络-负值和大于1的计算值

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 Elman模式计算新数据时,仍然得到负值和大于1的值

即使按原样运行ElmanXOR示例:

图层:1个输入,5个隐藏,1个输出 激活:激活乙状体 培训:LevenbergMarquardt培训: A.贪心的 B杂交策略->神经模拟退火


有可能吗?

如果您使用的是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