LearnSOFM;
LearnSOFM();
Метод LearnSOFM выполняет обучение самоорганизующейся карты Кохонена.
В процессе обучения корректируются значения весов синапсов.
Краткий алгоритм обучения:
выбор входного вектора сети (набора входных данных);
нормализация входных значений (при необходимости). Используйте методы INeuralNetwork.NormalizeInputValues, INeuralNetwork.NormalizeInputValuesEx;
вызов метода INeuralNetwork.PropagateSOFM для вычисления расстояния между нейронами во в выбранном входном векторе;
вызов метода LearnSOFM. Данный метод определит «победителя» и его соседей, затем изменит веса их синапсов;
определение ошибки карты. Используйте метод INeuralNetwork.GetError.
Процесс обучения можно повторять несколько раз. Одна итерация называется эпохой обучения.
В качестве примера приведена функция, на вход которой подается самоорганизующаяся карта Кохонена (параметр Net). Для выполнения примера добавьте ссылки на системные сборки «NN», «IO».
Function m_Learn(Net: NeuralNetwork): NeuralNetwork;
Var
epoch, learnRadius: Integer;
learnRate: Double;
NetFile: File;
TextW: ITextWriter;
Begin
TextW := NetFile.OpenTextWriter("C:/LearnRes.txt", True);
For epoch := 1 To 300 Do
learnRate := 0.6 * ((300 - epoch) / 300);
learnRadius := (3 * ((300 - epoch) / 350)) As Integer;
Net.SetLearnRadius(learnRadius);
Net.SetLearnRate(learnRate);
Net.SetUseVectorScalar(True);
Net.PropagateSOFM;
Net.LearnSOFM;
TextW.WriteLnString("Эпоха обучения '" + epoch.ToString + "'. Код ошибки: " + Net.GetError.ToString);
End For;
Return Net;
End Function m_Learn;
После выполнения примера будет выполнено обучение сети. Для вычисления дистанции между нейронами будет использоваться алгоритм скалярного умножения векторов. Результаты будут выведены в файл «C:/LearnRes.txt».
В качестве примера приведена функция, на вход которой подается нейронная сеть (параметр Net).
Imports System.IO;
Imports Prognoz.Platform.Interop.NN;
…
Public Shared Function m_Learn(Net: NeuralNetwork): NeuralNetwork;
Var
epoch, learnRadius: Integer;
learnRate: Double;
NetFile: StreamWriter;
Begin
NetFile := File.CreateText("C:/LearnRes.txt");
For epoch := 1 To 300 Do
learnRate := 0.6 * ((300 - epoch) / 300);
learnRadius := (3 * ((300 - epoch) / 350)) As Integer;
Net.SetLearnRadius(learnRadius);
Net.SetLearnRate(learnRate);
Net.SetUseVectorScalar(True);
Net.PropagateSOFM();
Net.LearnSOFM();
NetFile.WriteLine("Эпоха обучения '" + epoch.ToString() + "'. Код ошибки: " + Net.GetError().ToString());
End For;
NetFile.Close();
Return Net;
End Function;
После выполнения примера будет выполнено обучение сети. Для вычисления дистанции между нейронами будет использоваться алгоритм скалярного умножения векторов. Результаты будут выведены в файл «C:/LearnRes.txt».
См. также: