Я работаю над доказательством основных результатов нейронной сети и до сих пор не смог. Я делаю проблему с отправкой вперед xor в encog и экспортирую конечные веса и вычисляемый вывод.Proofing encog xor results in excel
Для доказательства у меня просто есть лист Excel, в который вводятся веса, тогда I1 * W1 + I2 * W2 | I1 * W3 + I2 * W4 к скрытому слою, затем сигмоидная активация для каждого, затем H1 * W5 + H2 * W6, затем сигмоид снова для выхода.
Так что никакого смещения, просто базового 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, вот что я использую для сигмовидной функции: = 1/(1 + EXP (-1 * (C3))), не знаю, поможет ли больше, поскольку это просто добавление и умножение вне сигмовидной.
Вот 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)
{
}
}
}
Какой у вас код на данный момент? Трудно понять, что может быть проблемой, не видя, что вы делаете. –
Добавил my form1.cs в исходное сообщение, и то, что я использую для сигмоида в excel, дайте мне знать, если больше информации будет полезно, спасибо! – Israel
Вот еще один пример, о ближайшей вещи, которую я нашел в качестве доказательства: http://www.generation5.org/content/2001/xornet.asp Эта сеть немного отличается, поскольку она имеет 1 смещение на нейрон, но в excel Я переделал свои расчеты, включив в них предвзятость. До точки первого выхода (до обучения) у меня такой же выход: 0,367610, но как только я подключу его последние весы, я не получаю нигде близко к его выходу. Почти такая же стена, с которой я сталкиваюсь с моей первоначальной проблемой. – Israel