私は基本的なニューラル ネットワークの結果を証明するために取り組んでいますが、これまでのところできていません。encog でフィードフォワード xor 問題を実行し、最終的な重みと計算された出力をエクスポートします。
証明するために、重みを入力するExcelシートがあるだけです.I1 * W1 + I2 * W2 | I1*W3+I2*W4 を非表示層に適用し、次にそれぞれのシグモイド アクティベーション、次に H1*W5+H2*W6 を出力のために再度シグモイド化します。
したがって、偏りはなく、基本的な 2x2x1 ですが、ウェイトを接続すると得られる出力値は、encog で受け取る期待される出力値に近くありません。
encog からテストする 8 つの出力セットがありますが、これまでのところ、同じ結論には達していません。どんな助けでも大歓迎です。
以下は、それが役立つ場合の出力例です。ありがとう、イスラエル
出力重み
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)
{
}
}
}