Функции инициализации и обучения ИНС

Далее будет использована полносвязная нейронная сеть прямого распространения, просто потому что.

Функция инициализации нейронной сети прямого распространения: newff(). В качестве параметров - массив обучающих примеров, массив ожидаемых результатов (меток) - на данном этапе массивы используются только для определения размерности входного и выходного слоя ИНС; следующий аргумент - число нейронов в скрытом слое (слоях). Затем необязательные аргументы выбора функции активации, алгоритма обучения.

Например, пусть массив обучения будет состоять из одного признака, тогда массив обучения выглядит как простой вектор, каждое число - один пример. Выход нейронной сети определим как один нейрон.

learning = [0 1 2 3 4 5 6 7 8 9 10];

targets = [0 1 2 3 4 5 6 7 8 9 10];

net = newff(learning,targets,[3]);

Создастся нейронная сеть net, с одним нейроном во входном слое и 1 в выходном (по размерности входных массивов), с 3 нейронами в первом и единственном скрытом слое.

При текущем обучении можно сказать, что нейронная сеть аппроксимирует зависимость выходного массива от входного, которая в данном случае является линейной зависимостью.

Обучение нейронной сети:

net = train(net,learning,targets);

Распознавание нейронной сетью производится функцией sim() (от слова simulation - симуляция работы нейронной сети). Аргументы - нейронная сеть и массив, подлежащий распознаванию

output = sim(net,2);

Так как выходной слой ИНС содержит 1 нейрон, то и output будет содержать единичное значение. В этом примере у меня получился результат output = 1.999. Это может значить как то, что ИНС обучилась правильно, так и то, что ИНС просто запомнила массив обучения.

Для проверки нужно использовать примеры, не использовавшиеся при обучении (кросс-валидация). Например,

output = sim(net,2.5);

у меня дало результат 2.5; это означает, что моя ИНС имеет свойство обобщения, а значит уже не всё так плохо.

 

Обучение ИНС

Обучение нейронной сети в Matlab происходит, пока не сработает одно из следующих ограничений: ошибка обучения не станет меньше заданной, число эпох достигнет заданного максимального значения, значения коэффициентов обучения не превысят заданных.

Задание этих ограничений:

net.trainParam.epochs = 100; % Максимальное число эпох обучения

net.trainParam.goal = 0;  % Ошибка никогда не достигнет нуля

net.trainParam.max_fail = 100; % Макс. число проверок валидации

net.trainParam.min_grad = 0; % Минимальное значение градиента

net.trainParam.mu_max = 10e+20;% Минимальное значение

 

В обучении ИНС Matlab разделяет исходную обучающую выборку на три массива: массив обучения (train dataset), массив валидации (validation dataset), тестовый массив данных (test dataset). После каждой эпохи обучения (однократной корректировки весовых коэффициентов) происходит оценка результативности (performance) ИНС на массиве валидации. Таким образом, массив валидации неявно влияет на процесс обучения, поэтому для объективной проверки после завершения обучения (после всех эпох) единожды производится контрольное распознавание на тестовом массиве. Разделение всего массива данных на массив обучения и тестовый для контрольной оценки называется кросс-валидацией (cross-validation).

По умолчанию Matlab сам совершает разделение массивов в соотношении 70% - на обучение, 15% на валидацию и 15% на тест. Но для надёжности лучше самостоятельно разделять все исходные данные на массив обучения и тестовый массив (например, в соотношении 70% на 30%) и после обучения самостоятельно провести проверку, просто подав на распознавание тестовый массив и оценить ошибку.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: