我浏览了整个文档,但没有找到如何设置RBF网络的方法。在ConsoleExamples/Examples/Radial中找到了一些RBF示例,但是看起来它不再起作用了,因为Encog中的一些方法已经更改。
目前我被卡住了:
public static double[][] XORInput = {
new[] {0.0, 0.0},
new[] {1.0, 0.0},
new[] {0.0, 1.0},
new[] {1.0, 1.0}
};
public static double[][] XORIdeal = {
new[] {0.0},
new[] {1.0},
new[] {1.0},
new[] {0.0}
};
int dimension = 8;
int numNeuronsPerDimension = 64;
double volumeNeuronWidth = 2.0 / numNeuronsPerDimension;
bool includeEdgeRBFs = true;
RBFNetwork n = new RBFNetwork(dimension, numNeuronsPerDimension, 1, RBFEnum.Gaussian);
n.SetRBFCentersAndWidthsEqualSpacing(0, 1, RBFEnum.Gaussian, volumeNeuronWidth, includeEdgeRBFs);
//n.RandomizeRBFCentersAndWidths(0, 1, RBFEnum.Gaussian);
INeuralDataSet trainingSet = new BasicNeuralDataSet(XORInput, XORIdeal);
SVDTraining train = new SVDTraining(n, trainingSet);
int epoch = 1;
do
{
train.Iteration();
Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error);
epoch++;
} while ((epoch < 1) && (train.Error > 0.001));
当我运行此代码时,SetRBFCentersAndWidthsEqualSpacing 方法会报错提示 "总的RBF神经元数量必须是某个整数的 'dimensions' 次幂."。如果我将此方法更改为 RandomizeRBFCentersAndWidths,直到达到 train.iteration(),则代码可以正常工作,但在那一步之后,会出现 "数组索引超出范围" 的错误提示。我了解 RBF 网络的工作原理,但是对于 SetRBFCentersAndWidthsEqualSpacing 方法中的所有参数感到困惑,是否有人能够更详细地解释一下?