Tôi đã đi qua toàn bộ tài liệu và không tìm thấy cách thiết lập mạng RBF. Tôi tìm thấy một số ví dụ RBF trong ConsoleExmpales/Ví dụ/Radial, nhưng có vẻ như nó không hoạt động nữa, bởi vì một số phương pháp đã được thay đổi trong Encog.Encog C# Mạng RBF, cách bắt đầu?
Cho đến nay tôi bị mắc kẹt về vấn đề này:
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));
Khi tôi chạy này, tôi nhận được lỗi "Tổng số tế bào thần kinh RBF phải là một số nguyên với sức mạnh của 'chiều'." trên SetRBFCentersAndWidthsEqualSpacing. Nó hoạt động nếu tôi thay đổi phương thức này cho RandomizeRBFCentersAndWidths cho đến khi train.iteration() đạt được, nơi tôi nhận được "Chỉ số nằm ngoài giới hạn của mảng".
Tôi hiểu cách hoạt động của mạng RBF, nhưng tôi bị nhầm lẫn với mọi tham số trong phương thức SetRBFCentersAndWidthsEqualSpacing, ai đó có thể giải thích chi tiết hơn ?.
Tôi quên để thay đổi không gian của tôi, 2 là đúng. Cảm ơn bạn đã trỏ tới numNeuronsPerDimension, giờ nó hoạt động! Tôi đã thử 8, 32 và nó không hoạt động, do đó, chỉ có 16, 64, 256. – EdWood
WRT sức mạnh của kích thước là yêu cầu của các trung tâm RBF và chiều rộng bằng nhau khoảng cách thuật toán –
Tôi nghĩ rằng có một lỗi trong phiên bản .NET trên dòng 232: var expectedSideLength = (int) Math.Pow (totalNumHiddenNeurons, 1.0d/dimension); double cmp = Math.Pow (totalNumHiddenNeurons, 1.0d/dimensions); if (expectedSideLength! = cmp) hai biến này không thể bằng nhau, bởi vì "(int)" làm tròn số. Đó là trùng hợp ngẫu nhiên rằng nó hoạt động cho ví dụ XOR, với dimenson khác nhau như 19 nó sẽ không hoạt động. – EdWood