Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нейросеть. первые шаги. matlab 
:(
    Опции темы
neutrino
Дата 25.4.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Приветствую!

Мне необходимо изучить САБЖ. Вот первое, что я сделал (у меня ничего н получилось):
Я придумал 41 характеристику и для каждой случайно подобрал standart deviation (не знаю как по-русски, может среднее квадратичное отклонение?) и среднее значение. В дальнейшем я в Excel'e для каждой такой характеристики создал около 1000 опытных данных: сгенерировал числа поддающиеся нормальному распределению с соответствующими средним и квадратичным отклонением. Эту операцию я повторил 4 раза. Далее в матлабе я взял нейросеть с 41 входными нейронами, 41 в скрытом слое (hidden layer) и 4 выходными. У меня есть как-будто четыре вида устройств, которые характеризуются по 41-ой характеристике. 

Нейросеть была создана с помощью команды newff. Обучал я ее функциями trainlm, trainrp и trainbp. При обучении для каждого набора характеристик давал как выход: 0 0 0 1 - для первого устройства, 0 0 1 0 - для второго, 0 1 0 0 - для третьего и 1 0 0 0 - для четвертого.

Проблема в том, что когда я симулирую данные, которые нейросеть не видела, то получаю один и тот же бред на выходе для всех цифр: 0 -0 1 1. В чем может быть проблема?

Если нужны более подробные объяснения или код на матлабе, могу все предоставить.

Спасибо.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
VictorTsaregorodtsev
Дата 26.4.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



А обучилась ли нейросеть поставленной задаче? Ошибку обучения (среднеквадратичную ошибку на обучающей выборке, процент правильно распознанных после обучения примеров каждого класса (устройства)) - в студию!

Скорее всего, произошла ошибка в процессе генерации обучающих или тестовых данных, либо обучение было неуспешным. Вдобавок, при обучении сети никак не вводилось требование запрещения выдачи одновременно двух и более единиц на выходе smile 
PM MAIL WWW   Вверх
neutrino
Дата 26.4.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Цитата(VictorTsaregorodtsev @  26.4.2007,  08:12 Найти цитируемый пост)
Вдобавок, при обучении сети никак не вводилось требование запрещения выдачи одновременно двух и более единиц на выходе

А это как?
Цитата(VictorTsaregorodtsev @  26.4.2007,  08:12 Найти цитируемый пост)
Ошибку обучения (среднеквадратичную ошибку на обучающей выборке, процент правильно распознанных после обучения примеров каждого класса (устройства)) - в студию!

100% smile


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
VictorTsaregorodtsev
Дата 26.4.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



А толку только от 100%? Я же просил и MSE-ошибку тоже указать, да и непонятно само правило отнесения непрерывнозначного значения выходного сигнала сети к нулю или единице.
Где порог, значение выше которого считается за 1, а ниже - за 0? Может 0 - это именно физический компьютерный 0, а 1 - все значения, хоть сколько-нибудь от нуля отличные. Тогда действительно любая малая флуктуация выходного сигнала сети вокруг нуля может в итоге радикально менять "отдискретизованный" ответ сети.
PM MAIL WWW   Вверх
neutrino
Дата 26.4.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Я думаю мы друг друга не поняли. Вернее будет сказать, что я неправильно выразился.

100% ошибки - это я шуточно указал на то, что сеть просто напросто не работает.

Цитата(VictorTsaregorodtsev @  26.4.2007,  11:58 Найти цитируемый пост)
Я же просил и MSE-ошибку тоже указать

А что это? И как мне ее подсчитать?

Цитата(VictorTsaregorodtsev @  26.4.2007,  11:58 Найти цитируемый пост)
да и непонятно само правило отнесения непрерывнозначного значения выходного сигнала сети к нулю или единице.

ОК. Поскольку я совсем зеленый в этом деле, очень прошу отнестись с пониманием. Я не совсем себе представляю как именно все это работает. На занятиях мы когда-то делали такую вот лабораторную:
было около 2 тысяч нарисованных по разному цифр 2,3,4 и 8. В матлабе надо было построить сеть, которая бы обучалась по данным рисунка определять какая это цифра. Делалось это так: каждая цифра была нарисована на картинке 16 на 16 пикселей. Это переводилось в вектор длинной 256. У сети не было скрытого слоя, а просто на выходе четыре нейрона. Обучалась она аналогичным моему способом: для 2-ки выход должен был быть 0 0 0 1, для 3-ки - 0 0 1 0, для 4-ки - 0 1 0 0 а для 8-ки - 1 0 0 0. Было что-то вроде такого:
net = newff([0, 255; 0, 255 ...], [4], {'tansig'}, 'trainlm');
net = train(net, trainset2, [0 0 0 1; 0 0 0 1; ...]);
net = train(net, trainset3, [0 0 1 0; 0 0 1 0; ...]);
net = train(net, trainset4, [0 1 0 0; 0 1 0 0; ...]);
net = train(net, trainset8, [1 0 0 0; 1 0 0 0; ...]);

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


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
VictorTsaregorodtsev
Дата 27.4.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Нда, а я "понял", что 100% правильно (иначе просто не стоит переходить к тесту сети на новых данных - очевидно, что для них будет совершенно бредовый прогноз). Имеется в виду ошибка на ОБУЧАЮЩИХ данных, а не на тестовых, т.е. показатель, что сеть обучающим данным как-то обучилась.

MSE (mean square error) - значение среднеквадратичной ошибки, именно тот показатель, который минимизируется в ходе обучения сети (и поэтому является тем показателем качества, на который надо смотреть в первую очередь - ведь он оптимизируется явно, в отличие от числа правильно классифицированных обучающих примеров, которое оптимизируется опосредованно). Где и как матлаб его выводит - ХЗ, я с матлабом не работал, но очевидно, что выводиться он должен.

Указанный пример обучения сети является самым неоптимальным (!!!), т.к. обучение на последующей цифре совершенно не гарантирует сохранения навыка распознавания цифр, которым сеть обучалась ранее. Учить надо по полной обучающей выборке (все цифры/устройства/классы), причем примеры разных классов желательно перемешать (хоть указанные алгоритмы обучения перемешивания и не требуют, но на будущее, для online-методов обучения, стоит об этом не забывать). Поэтому ошибка в 10% - это было из области чуда.

Так что еще одна возможная причина некорректного результата (наряду с необученностью сети) - неправильный "способ" обучения (учить надо всему сразу, а не отдельные ситуации по-очереди)
PM MAIL WWW   Вверх
neutrino
Дата 27.4.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Цитата(VictorTsaregorodtsev @  27.4.2007,  07:33 Найти цитируемый пост)
Имеется в виду ошибка на ОБУЧАЮЩИХ данных, а не на тестовых, т.е. показатель, что сеть обучающим данным как-то обучилась.

ОК. Запущу заново и сообщу.
Цитата(VictorTsaregorodtsev @  27.4.2007,  07:33 Найти цитируемый пост)
Указанный пример обучения сети является самым неоптимальным (!!!), т.к. обучение на последующей цифре совершенно не гарантирует сохранения навыка распознавания цифр, которым сеть обучалась ранее. Учить надо по полной обучающей выборке (все цифры/устройства/классы), причем примеры разных классов желательно перемешать (хоть указанные алгоритмы обучения перемешивания и не требуют, но на будущее, для online-методов обучения, стоит об этом не забывать). Поэтому ошибка в 10% - это было из области чуда.

Спасибо за совет!


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
neutrino
Дата 28.4.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Приветствую!

Сеть очень странно обучается. 
Я сделал так: обучил ее только одному эталонному вектору типа 1 с должным результатом [0 0 0 1], после чего проверил как сеть ему обучилась, и получил ответ [0 0 0 1]. Повторил эту операцию для вектора типа 2 и 3 - результат правильный. Но как только я обучил ее вектору типа 4, то получил [1 1 0 0] вместо [1 0 0 0]. Последующие вызовы с любыми входными значениями дают тот же результат [1 1 0 0].
Что я делаю неправильно? Может поменять какие-то параметры обучения?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
VictorTsaregorodtsev
Дата 29.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Цитата(neutrino @  28.4.2007,  12:06 Найти цитируемый пост)
Но как только я обучил ее вектору типа 4, то получил [1 1 0 0] вместо [1 0 0 0]. Последующие вызовы с любыми входными значениями дают тот же результат [1 1 0 0].

Ну, значит, сетка не обучилась - требуемый выходной результат так для этого вектора и не достигнут. Почему - а ХЗ, аборт по интернету не делается (прошу же дать СТАНДАРТНЫЕ ЧИСЛОВЫЕ показатели точности типа MSE, чтобы хоть действительно можно было доказать обученность или необученность).

То, что она потом встала колом и дает одинаковый выход для любых входов - это проблема дискретизации непрерывнозначных выходных сигналов в 0 или 1. Не максимум надо приравнивать к 1 (тем более, при результате [1 1 0 0] я не верю, что максимальных чисел пара и они равны - для непрерывнозначных значений такое бывает только чудом), а смотреть по близости к кодовым значениям (т.е. если >=0,5 то 1, если <0,5 - то 0).
PM MAIL WWW   Вверх
neutrino
Дата 29.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Когда я ее обучаю, у меня рисуется график обучения. По оси Х у меня количество epoch, а по Y - performance. Обучение я делаю при помощи функции traingdm - градиентный с моментом способ обучения. Оценка performance начинается с 10 (примерно) и заканчивается в 10е-5 (для большинства эталонных значений).
Это помогает? Нужен сам график обучения какому-нибудь эталонному значению?

Спасибо!

Добавлено через 4 минуты и 54 секунды
Цитата(neutrino @  29.4.2007,  12:26 Найти цитируемый пост)
Оценка performance начинается с 10 (примерно) и заканчивается в 10е-5 (для большинства эталонных значений).

Имелось в виду, что она начинается с 10 и по ходу обучения падает. Падает она для разных эталонных значений по-разному: у некоторых она асимптотически приближается к 10е-5 (оценка performance при которой останавливается обучение, эту оценку задаю я), у некоторых она еще вначале стремительно падает вниз и достигает этого предела. 
Обучение для эталонного значения останавлилвается если достигнуто 2000 epoch, либо достигнута оценка 10е-5.

Вот так.



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
neutrino
Дата 29.4.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Значит так, видимо эталонные значения выбраны некорректно. Я обучал сеть в таком порядке: эталонное значение 1-го типа, 2-го, 3-го, 4-го, 1-го, 2-го, 3-го, 4-го, 1-го ... Заметил, что сеть поддается обучению лишь эталонным данным 1-го типа. Я проверял после каждого обучения эталонным значением, как сеть обучилась этому значению.
Может ли быть ошибка еще в чем-нибудь?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
VictorTsaregorodtsev
Дата 30.4.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Тогда, при такой финальной performance (эта та самая MSE - средний квадрат ошибки) и выдачи [1 1 0 0] после обучения ЕДИНСТВЕННОМУ вектору четвертого типа - ошибка только в обучении по единственному примеру и, может быть, схеме дискретизации выходных сигналов по максимуму (надо всё-таки мерять близость к эталонным кодам).

Учить методом traingdm надо по набору векторов разных типов сразу. Перемешивать при этом вектора разных типов не обязательно - можно их подать последовательно группами друг за другом, или в цикле 1-2-3-4, всё это без разницы будет именно для этого метода обучения.

То, что обучается только первому типу (опять же непонятен смысл слова "обучается" - какая там performance для наборов векторов других типов?) может быть связано с тем, что входные сигналы для этих "трудных" типов малоинформативны ("видимо эталонные значения выбраны некорректно" - может быть как раз из этой оперы), и сетке проще установить константное смещение для выходного нейрона (это и может объяснять ситуацию [1 1 0 0] - при раздельном обучении по разным типам сначала выставили смещение у третьего выходного нейрона, потом у четвертого, не затрагивая третий), чем обучиться именно отображению входных сигналов в выходной.

Это сообщение отредактировал(а) VictorTsaregorodtsev - 30.4.2007, 10:44
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.