我正在努力证明基本的神经网络结果,但到目前为止还没有。我在 encog 中做一个前馈 xor 问题并导出最终的权重和计算的输出。
为了证明我只有一个 Excel 表,我在其中输入了权重,然后是 I1*W1+I2*W2 | I1*W3+I2*W4 到隐藏层,然后每个都激活 sigmoid,然后 H1*W5+H2*W6 然后再次 sigmoid 输出。
所以没有偏差,只是一个基本的 2x2x1,但是我插入权重后得到的输出值与我使用 encog 收到的预期输出值相差甚远。
我有 8 个来自 encog 的输出集可供测试,但到目前为止,我还没有得出相同的结论。任何帮助,将不胜感激。
如果有任何帮助,下面是一个示例输出。谢谢,以色列
输出权重
61.11812639080170, -70.09419692460420, 2.58264325902522, 2.59015713019213, 1.16050691499417, 1.16295830927117
输出值
0.01111771776254, 0.96929877340644, 0.96926035361899, 0.04443376315742
在 excel 中,这是我用于 sigmoid 函数的内容:=1/(1+EXP(-1*(C3))),不知道更多是否有帮助,因为它只是 sigmoid 之外的加法和乘法。
这是 Form1.cs:
using Encog.Engine.Network.Activation;
using Encog.ML.Data.Basic;
using Encog.Neural.Networks;
using Encog.Neural.Networks.Layers;
using Encog.Neural.Networks.Training.Propagation.Resilient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Encog_Visual
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
double[][] XOR_Input =
{
new[] {0.0,0.0},
new[] {1.0,0.0},
new[] {0.0,1.0},
new[] {1.0,1.0}
};
double[][] XOR_Ideal =
{
new[] {0.0},
new[] {1.0},
new[] {1.0},
new[] {0.0}
};
var trainingSet = new BasicMLDataSet(XOR_Input, XOR_Ideal);
BasicNetwork network = CreateNetwork();
var train = new ResilientPropagation(network, trainingSet);
int epoch = 0;
do
{
train.Iteration();
epoch++;
string result0 = String.Format("Iteration No :{0}, Error: {1}", epoch, train.Error);
textBox1.AppendText(result0 + Environment.NewLine);
} while (train.Error > 0.001);
foreach (var item in trainingSet)
{
var output = network.Compute(item.Input);
string result1 = String.Format("Input : {0}, {1} Ideal : {2} Actual : {3}", item.Input[0], item.Input[1], item.Ideal[0], output[0]);
textBox1.AppendText(result1 + Environment.NewLine + network.DumpWeights() + Environment.NewLine);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private static BasicNetwork CreateNetwork()
{
var network = new BasicNetwork();
network.AddLayer(new BasicLayer(null, false, 2));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 2));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 1));
network.Structure.FinalizeStructure();
network.Reset();
return network;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}