Выполнил:
- Рой Виктор
- ННГУ, ф-т ИТММ, каф. МО ЭВМ, группа 381603м4
- Изучить метод обратного распространения ошибки;
- Вывести математические формулы для вычисления градиентов функции ошибки по параметрам нейронной сети и формул коррекции весов;
- Спроектировать и разработать программную реализацию;
- Подготовить отчет по проделанной работе.
- Установить python3 c библиотекой Numpy;
- Запустить файл main.py с аргументами
- '-h' помощь
- '-n' количество тренировочных изображений
- '-t' количество тестовых изображений
- '-s' количество скрытых слоев
- '-l' скорость обучения
Пример запуска: python main.py -n 10000 -t 1000 -s 200 -l 0.005
Функция ошибки кросс-энтропия:
Функция активации на скрытом слое тангес:
Функция активации на втором слое softmax:
-
Инициализируем веса значениями из диапазона [0, 0.5]
-
Пока количество проходов < max_epoch делаем:
Для всех картинок от 1 до number_train_images
-
Подаем на вход x, суммируем cигналы на скрытом слое , применяем функцию активации
-
Для каждого выходного нейрона суммируем взвешенные входящие сигналы , применяем функцию активации
-
Считаем градиенты функции ошибки:
В случае гиперболического тангенса:
Тогда
+ Корректируем веса в соответствии с градиентами функции ошибки: -
Программа написана на Python 3.6. В рамках лабораторной работы был создан класс NeuraNetwork.py, в котором реализованы следущие методы:
- initializeWeights() - инициализация весов случайными значениями из диапазона [0, 0.5];
- train(self, x_values, t_values, maxEpochs, learnRate, crossError) - обучение сети с помощью метода обратного распространения ошибки;
- computeOutputs(self, xValues) - расчет значений на выходе сети;
- computeGradient(self, t_values, oGrads, hGrads) - расчет градиентов для обновления весов перед следующим шагом алгоритма;
- updateWeightsAndBiases(self, learnRate, hGrads, oGrads) - обновление весов сетки;
- crossEntropyError(self, x_values, t_values) - расчет величины кросс-энтропии;
- accuracy(self, x_values, t_values) - расчет ошибки в натренированной нейронной сети.
Число нейронов скрытого слоя | К-во эпох | Точность тренировочная | Точность тестовая |
---|---|---|---|
100 | 14 | 0.9974 | 0.9725 |
200 | 17 | 0.9982 | 0.9837 |
300 | 22 | 0.9994 | 0.9821 |