Прошу помочь мне разобраться, так как я только начал изучать. Вобщем нейронные сети это тема моей курсовой(учусь на третьем курсе ФКТиПМ). Задача поставленна следующая: Определение возрастной группы человека по фотографии лица, с помощью естественно нейронной сети.
Для начала чтобы разобраться в теме, я решил реальзовать более простую задачу: на вход сети подается bmp картинка(градация серого) буквы английского алфавита, на выходе собственно разпознаная буква.
Структура сети следующая:
Многослойный персептрон из двух слоев
- bmp картинки размером 12х12 пикселей, т.е. входной вектор сети размером 144 и возможными значениями компонент от 0 до 255.
- Нейронов скрытого слоя сделал тоже 144 штуки.
- Нейронов выходного слоя сделал столько сколько существует букв - соответственно 26 штук.
- Функция активации нейронов - сигмоидальная униполярная, т.е. 1/(1+exp(-b*x))) коэффициент b для нейронов скрытого слоя равен 6, для нейронов ввыходного слоя равен 8.
- Начальные значения весов задаются в пределах -0.2 до 0.2.
- Для обучения использую алгоритм обратного распространения ошибки(последовательный режим). коэффициент "скорости обучение" выбирал 0.01, 0.02, 0.05
Проблема в следующем: При подачи в качестве обучающих выборок 30 картинок (по 5 для каждой буквы) сеть обучается за 500-1000 эпох, и значение глобальной ошибки(по всем 30 картинкам) можно минимизировать до 1 и даже меньше. После этого эти первые 6 букв A,B,C,D,E,F распознаются сеть без проблем и даже картинки с этими буквами не входившие в обучающие выборки(нарисованные в фотошопе после обучения) распознаються на ура.(в качестве результата беру номер компоненты выходного вектора Y значение которой наибольшее).
Но если я подаю для обучения все 26 букв, неважно по сколько картинок для каждой, то ошибка ни как не сводиться к 1.
Например при 130 картинках(по 5 для каждой буквы) - глобальная ошибка достигала -20 при 50000 эпох обучения, при 52 картинках(по 2 для каждой буквы) глобальная ошибка достигала - 5.
Этого оказывается недостаточно и сеть неправильно распознает, даже картинки которые использовались при обучении
.
Подскажите пожалуйста, что можно с этим сделать? Может мне нужно выбрать другое число скрытых нейронов или добавить еще один слой, а может что-то нетак с коэффицентами? Просто я не знаю какое количество нужно выбирать, а нигде про это не написано.
Для начала чтобы разобраться в теме, я решил реальзовать более простую задачу: на вход сети подается bmp картинка(градация серого) буквы английского алфавита, на выходе собственно разпознаная буква.
Структура сети следующая:
Многослойный персептрон из двух слоев
- bmp картинки размером 12х12 пикселей, т.е. входной вектор сети размером 144 и возможными значениями компонент от 0 до 255.
- Нейронов скрытого слоя сделал тоже 144 штуки.
- Нейронов выходного слоя сделал столько сколько существует букв - соответственно 26 штук.
- Функция активации нейронов - сигмоидальная униполярная, т.е. 1/(1+exp(-b*x))) коэффициент b для нейронов скрытого слоя равен 6, для нейронов ввыходного слоя равен 8.
- Начальные значения весов задаются в пределах -0.2 до 0.2.
- Для обучения использую алгоритм обратного распространения ошибки(последовательный режим). коэффициент "скорости обучение" выбирал 0.01, 0.02, 0.05
Проблема в следующем: При подачи в качестве обучающих выборок 30 картинок (по 5 для каждой буквы) сеть обучается за 500-1000 эпох, и значение глобальной ошибки(по всем 30 картинкам) можно минимизировать до 1 и даже меньше. После этого эти первые 6 букв A,B,C,D,E,F распознаются сеть без проблем и даже картинки с этими буквами не входившие в обучающие выборки(нарисованные в фотошопе после обучения) распознаються на ура.(в качестве результата беру номер компоненты выходного вектора Y значение которой наибольшее).
Но если я подаю для обучения все 26 букв, неважно по сколько картинок для каждой, то ошибка ни как не сводиться к 1.
Например при 130 картинках(по 5 для каждой буквы) - глобальная ошибка достигала -20 при 50000 эпох обучения, при 52 картинках(по 2 для каждой буквы) глобальная ошибка достигала - 5.
Этого оказывается недостаточно и сеть неправильно распознает, даже картинки которые использовались при обучении
.
Подскажите пожалуйста, что можно с этим сделать? Может мне нужно выбрать другое число скрытых нейронов или добавить еще один слой, а может что-то нетак с коэффицентами? Просто я не знаю какое количество нужно выбирать, а нигде про это не написано.




