Выбор и обоснование оптимальной сети.




Лабораторная работа №1.

Классификация образов с помощью искусственной нейронной сети (ИНС).

Цель работы: знакомство с архитектурой и способами применения нейронных сетей прямого распространения сигналов.

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

Работа состоит из следующих этапов:

1. Загрузка и обработка графического файла с изображениями букв.

2. Представление графической информации в виде пригодной для обработки ИНС.

3. Построение и обучение ИНС с различными параметрами.

4. Выбор и обоснование оптимальной сети.

5. Оценка работы ИНС на тестовом множестве.

Загрузка и обработка графического файла с изображениями букв.

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

Рис.1 – Символы русского алфавита

Представление графической информации в виде пригодной для обработки ИНС.

ИНС представляет собой цифровую систему обработки информации, поэтому текстовые данные должны быть представлены в виде цифрового кода. Программа разрабатывается в среде GNUOctave.

При вводе команды Edit появляется окно, куда и будем писать код программы. Файл необходимо сохранить с расширением (*.m) в одну папку с графическим файлом созданным ранее. Чтение данных из указанного файла осуществляется за счет использования оператора imread(). В данном случаем в скобках укажем полный путь к графическому файлу-алфавиту.

Производим кодировку входов и выходов:

if(A(:,NPS)==1)

NPS=NPS+1; #буквы нет

else

B=A(:,NPS:NPS+9); #изображение отдельной буквы

B=reshape(B,1,100);

X=cat(1,X,B);

NPS=NPS+10;

end

Нормировка. Предварительно округлив все значения в полученном массиве данных до ближайшего целого round(А), добьемся замены отображения белого цвета. Обычно белый цвет отображается как - 255, черный – 0. Для простоты обработки данных 255 заменим на 1, разделив все исходные значения матрицы на 255.

A=imread('alfa2.bmp');

A=round(A);

A=A./255

X=zeros(0,100); #создание массивов входов (пустой)

NPS=1; #номер просматриваемого столбца

[rA,cA]=size(A); #сА-количество столбцов А

while(NPS<=cA)

Выделение символов и запись в массив. В начале необходимо организовать поиск в массиве столбца, где начинается символ (то есть ищем нули), затем записать в новую матрицу 10 столбцов начиная с текущего. Размер новой матрицы получится 10х10. Далее преобразуем ее в вектор-столбец и записываем ее в массив Х, присоединив к ней справа матрицу В. Для этого воспользуемся циклом For, который позволит повторить эту операцию до конца файла. В итоге в каждом столбце матрицы X будет записано цифровое отображение графического символа.

Построение и обучение ИНС с различными параметрами.

Создание обучающих примеров с искажением символов. Так как изображения символов на бумажном носителе могут быть искажены при сканировании, то необходимо искусственно внести помехи в изображение («шум»). Воспользуемся наиболее простым способом - инвертирование цвета пикселя найденного случайным образом. В нашем случае цифровое отображение графического символа размещено в одном столбце матрицы X, поэтому необходимо получить случайное число от 1 до 100 и в этой строке инвертировать значение. Для одного символа рекомендуется повторить эту процедуру желательно 10 раз, но мы положим k=3, тем самым создаем новую матрицу Xv, где один столбец из матрицы X будет иметь 3 искаженных отображений на 1 неискаженный. Новый массив будет являться набором входных обучающих примеров. Отобразить это в программе можно следующим образом:

# Запуск файла

A=imread('alfa2.bmp');

A=round(A);

A=A./255

X=zeros(0,100); #создание массивов входов (пустой)

NPS=1; #номер просматриваемого столбца

[rA,cA]=size(A); #сА-количество столбцов А

while(NPS<=cA)

if(A(:,NPS)==1)

NPS=NPS+1; #буквы нет

else

B=A(:,NPS:NPS+9); #изображение отдельной буквы

B=reshape(B,1,100);

X=cat(1,X,B);

NPS=NPS+10;

end

end

Выбор и обоснование оптимальной сети.

Количество нейронов во входном слое выбираем равное 100, так как каждая буква состоит из 100 пикселей. В скрытом слое выбираем 40 нейронов, так как он состовляет 30-50% от входного слоя. В выходном слое выбираем 31 нейрон, так как в алфавите 31 буква.

# Создание искусственной нейронной сети

net=mlp(100,40,31,'softmax');

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

error=1000;

E=0.01; #требуемый уровень энергии ошибки

N=0; #счетчик эпох

while ((error>E)&&(N<=1000))

[net,error]=mlptrain(net,X,Y,10);

N=N+10;

error #вывод на экран

end

E=0.001;

while ((error>E)&&(N<=2000))

[net,error]=mlptrain(net,Xv,Yv,10);

N=N+10;

error

end

Произвели тестирование нейронной сети с различными функциями активации: linear, logistic, softmax. Получили данные о количестве эпох и уровню энергии ошибки, представленные в таблице 1.

Таблица 1. Функции активации

Функция активации N error
Linear   0,34880
Logistic   0,0009792
Softmax   0,00087108

 

Исходя из данных представленных в таблице 1 видно, что сеть с функцией активации softmax является оптимальной, потому что сеть имеет наименьшее количество эпох обучения и наименьший уровень энергии ошибки.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: