【发布时间】:2016-11-11 21:42:07
【问题描述】:
这是代码。
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 这很奇怪,因为算法没有任何问题。 权重越来越大。我哪里弄错了?
【问题讨论】:
-
你能展示你是如何训练你的感知器的吗?我的意思是执行你的训练逻辑的代码。
-
您在每次累积操作后应用 tanh。您需要先累积,然后再应用 tanh。
-
@rayryeng 谢谢,现在工作得很好。 :)
标签: c# machine-learning neural-network perceptron