Форум программистов, компьютерный форум, киберфорум
Наши страницы
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
tryff
0 / 0 / 1
Регистрация: 19.12.2015
Сообщений: 16
1

Распознавание изображений - ошибка при обучении

25.01.2016, 18:16. Просмотров 530. Ответов 5

Библиотека AFORGE.NET neuro

Попытался сделать распознаватель изображений / букв и т п.
Получился такой алгоритм:
Считать изображение
Уменьшить до фиксированного размера
Закодировать в массив double где числа от -1 до 1. (Тут вряд ли есть ошибки)
Скормить нейросети activatedNetwork.Run(этот массив, результат)
У нейросети один выход и куча входов.

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

Как правильно обучать сеть ActivatedNetwork алгоритмом обратного распространения ошибки из той же AFORGE

Добавлено через 3 часа 50 минут
Написал небольшую программу, чтобы убедиться.
Задача.
Если нейросеть видит нули, должна выводить 1, 0.
Если видит единицы, то должна вывести 0, 1.
После выполнения оказалось, что даже это не работает как надо.
Подскажите, что я неправильно делаю?

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
static void Main(string[] args)
        {
            double[] in1 =
            {
                1,1,1,1,
                1,1,1,1,
                1,1,1,1,
                1,1,1,1
            };
 
            double[] in2 =
            {
                0,0,0,0,
                0,0,0,0,
                0,0,0,0,
                0,0,0,0
            };
 
            double[] out1 = { 1, 0 };
 
            double[] out2 = { 0, 1 };
 
            var func = new SigmoidFunction();
            var network = new ActivationNetwork(func, 16, 4, 2);
            var learning = new BackPropagationLearning(network);
 
            for (int i = 0; i < 50; ++i)
            {
                bool f = i % 2 == 0;
 
                double[] input = f ? in1 : in2;     
                double[] correctOutput = f ? out1 : out2;
                double[] output = network.Compute(input);
 
                learning.Run(input, correctOutput);
 
                foreach (var obj in output)
                    Console.Write(obj + " ");
 
                Console.WriteLine();
            }
 
            Console.ReadKey();
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2016, 18:16
Ответы с готовыми решениями:

Локальный минимум при обучении нейросети
Как понять, что при обучении функция ошибки попала в локальный минимум? Ошибка начинает...

Распознавание изображений
Слышал что .net даёт возможность распознавать изображения. Какие это именно средства. И вобще...

Распознавание изображений
Уважаемые подскажите с сл.вопросом: Так получилось что я раздолбай прогулял весь курс по С++, но...

Нейросетевое распознавание изображений
Всем добрый день! Есть у меня курсовой проект &quot;Нейросетевое распознавание пола человека по...

Обработка изображений (распознавание текста)
Здравствуйте. Задача следующая: имеется сканированный документ с рукописным текстом. Каким образом...

5
VTsaregorodtsev
606 / 563 / 85
Регистрация: 19.02.2010
Сообщений: 2,055
27.01.2016, 21:58 2
Скорее всего, надо будет разобраться с "настройками" объекта BackPropagationLearning - чтобы он делал всего одну итерацию обучения во время вызова его метода Run(). Сейчас же он, похоже, учит сетку "до упора" на каждом предъявляемом эталоне (и при этом сетка не знает, что ей надо удовлетворять и другим ограничениям - правильно отвечать и на другие эталоны тоже).
Т.е. посмотрите, какие у BackPropagationLearning есть set-методы (варианты задания его поведения)


ЗЫ. С этой либой не работал (у меня свой собственный нейрософт) - делаю предположение только по тексту Вашего поста.
0
tryff
0 / 0 / 1
Регистрация: 19.12.2015
Сообщений: 16
28.01.2016, 22:08  [ТС] 3
Нет, Run запускает обучение один раз.
Сейчас немного подправил, сделал динамическую подстройку коэфф. обучения.
Для распознавания картинки масштабируются до разрешения 7*5.
Если поставить выше, резко возрастает время обучения (с 20-30 сек до вечности).
Сколько нужно слоёв и нейронов, не пойму: 10 штук справляются с 35 входами. 15 штук очень долго учатся

Добавлено через 8 часов 26 минут
Сейчас заметил еще одну интересную вещь. Обучение происходит скачками. То есть ошибка постепенно снижается, потом долго колеблется около определенного значения (без динамич. изменения LearningRate наверное бы вообще зависла). Потом резко доходит либо до конца, либо до следующего "тупика". Momentum = 0
0
Mikhaylo
202 / 206 / 29
Регистрация: 20.09.2014
Сообщений: 1,461
01.02.2016, 17:57 4
Характер обучения зависит от обучающей подборки, от количества нейронов и т.п. У Вас очень жесткое обучение каким-то скудным данным. То, что ИНС обучается, это уже здорово!
0
tryff
0 / 0 / 1
Регистрация: 19.12.2015
Сообщений: 16
06.02.2016, 13:33  [ТС] 5
По скудным данным...
Разве нейросети не подходят для распознавания изображений?
Как тогда быть, где можно их применить, чтобы хоть кого-то удивить?
0
Mikhaylo
202 / 206 / 29
Регистрация: 20.09.2014
Сообщений: 1,461
06.02.2016, 17:25 6
Ну не очень я может правильно и четко выразился... По большому счету, у Вас на входе 0 или 1, на выходе также 0 или 1. Можно сказать, что размерность входа и выхода скудная. Очень необычные данные для обучения, принимают полярные значения. Соответственно я бы не стал удивляться, что и ИНС ведет себя немного странно. Скорее всего на других данных все будет намного веселее.
0
06.02.2016, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2016, 17:25

AForge.Neuro. Распознавание графических изображений
Реализовать распознавание заданных образов на примере лаб.3 Треугольник, квадрат, ромб, круг

Распознавание изображений (Python код в Matlab'e)
Пoмогите пожалуйста написать в Matlab'e код написанный языком Python. заранее большое спасибo! ...

Ошибка при загрузки изображений с карты памяти при повороте экрана
Здравствуйте! Вопрос в следующем. Загружаю в активити фотки с камеры. Имя файла передаю следующим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru