ここにコードです。私の単層パーセプトロンは機能しません
public class Adaline
{
private int _layer;
public int Layer { get { return _layer; } }
private int _epoch;
public int Epoch { get { return _epoch; } }
private double _error;
public double Error { get { return _error; } }
private double[] _weights;
public Adaline(int layer)
{
_layer = layer;
_weights = new double[layer];
Reset();
}
public void Reset()
{
Random r = new Random();
for (int i = 0; i < _layer; i++)
_weights[i] = r.NextDouble() - 0.5;
_error = 1;
}
public void Train(BasicTrainSet<double> trainset, double learnRate)
{
double ers = 0;
for(int p = 0; p < trainset.DataCount; p++)
{
double result = Compute(trainset.Input[p], true);
double error = trainset.Output[p] - result;
for (int i = 0; i < _weights.Length; i++)
{
_weights[i] += error * trainset.Input[p][i] * learnRate;
}
ers += Math.Abs(error);
}
_epoch++;
_error = ers;
}
public double Compute(double[] input, bool quan)
{
double result = 0;
for (int i = 0; i < _layer; i++)
result += Math.Tanh(_weights[i] * input[i]);
//double result = _weights.Zip(input, (a, b) => Math.Tanh(a * b)).Sum();
return quan ? (result >= 0 ? 1 : 0) : result;
}
}
このようにトレーニングしてゲートしようとすると、このように動作します。 Up four results are from this code アルゴリズムに問題がないので、これはかなり奇妙です。 重量はますます大きくなっています。どこで間違えたの?
は、あなたがあなたのパーセプトロンを訓練する方法を示しすることはできますか?あなたのトレーニングロジックを実行するコードを意味します。 – serhiyb
各蓄積操作の後にtanhを適用しています。最初に蓄積する必要があります。その後にtanhを適用します。 – rayryeng
@rayryengありがとうございました。 :) – phillyai