|
neuroproject.ru Форум сайта компании НейроПроект
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Куркин Дмитрий Новый посетитель

Зарегистрирован: 23 Янв 2006 Сообщения: 12 Откуда: Челябинск
|
Добавлено: Пн Янв 23, 2006 9:59 am Заголовок сообщения: Программная реализация BackProp алгоритма |
|
|
Попробовал создать собственную сеть. Вроде получилось (имеется ввиду только способность сети выдавать корректные выходные значения на входные данные). Когда дело доходит до обучения, ничего не получается: все веса изменяются циклически: сначала слегка растут, потом также слегка уменьшаются, в итоге остаются примерно одинаковыми - процесс обучения никогда не заканчивается (так как ошибка на выходе при этом всегда остаётся огромная). У меня есть подозрения, что заданы некорректные обучающие выборки:
x1=[1, 0, 0, 0] y1=[1, 0]
x2=[0, 1, 0, 0] y1=[1, 0]
x3=[0, 0, 1, 0] y1=[0, 1]
x4=[0, 0, 0, 1] y1=[0, 1] при конфигурации сети: 4-3-2 для одного случая и:
x1=[0, 0] y1=[0]
x1=[0, 1] y1=[1]
x1=[1, 0] y1=[1]
x1=[1, 1] y1=[0] при конфигурации сети 2-2-1 для другого.
Что делать? Мож кто с этим уже сталкивался? |
|
| Вернуться к началу |
|
 |
siteadmin НейроПроект

Зарегистрирован: 10 Июн 2005 Сообщения: 81 Откуда: Москва
|
Добавлено: Вт Янв 24, 2006 6:17 pm Заголовок сообщения: |
|
|
данные нормальные. учиться должно идеально.
видимо вам надо поотлаживать алгоритм.
если с алгоритмом все ок, то может надо поиграть с параметрами обучения?(уменьшить скорость и тд)
вообще напишите поподробнее что вы делали(какие передаточные ф-ии, нормировка входов и тд) |
|
| Вернуться к началу |
|
 |
Куркин Дмитрий Новый посетитель

Зарегистрирован: 23 Янв 2006 Сообщения: 12 Откуда: Челябинск
|
Добавлено: Пн Янв 30, 2006 11:23 am Заголовок сообщения: |
|
|
| Насколько я понял, для указанных обучающих выборок нормировка не требуется. Скорости обучения брал следующие: 0.05, 0.1, 0.2 (т.е. маленькие). Передаточная функция: униполярный сигмоид (out = 1 / (1 + exp(-sum))), где sum это взвешенная сумма входов (пробовал как с учётом постоянного входа +1, так и без). Кстати, я так и не понял, нужен этот постоянный вход или нет (в некоторых источниках он используется, в некоторых - не используется). Веса изменял по формуле с моментом (той, где учитывается изменение веса на предыдущей итерации). |
|
| Вернуться к началу |
|
 |
siteadmin НейроПроект

Зарегистрирован: 10 Июн 2005 Сообщения: 81 Откуда: Москва
|
Добавлено: Вт Янв 31, 2006 7:36 pm Заголовок сообщения: |
|
|
постоянный вход нужен, так как задает постоянное смещение.
скорость лучше поставить 0.01
а какую величину момента вы ставили? |
|
| Вернуться к началу |
|
 |
Куркин Дмитрий Новый посетитель

Зарегистрирован: 23 Янв 2006 Сообщения: 12 Откуда: Челябинск
|
Добавлено: Ср Фев 01, 2006 2:13 pm Заголовок сообщения: |
|
|
| Момент (в формулах он зовётся [mu:]) брал равным 0.1 - 0.5. Он оказывался как больше так и меньше коэффициента обучения (скорости). |
|
| Вернуться к началу |
|
 |
Oleg Agapkin Администратор


Зарегистрирован: 10 Июн 2005 Сообщения: 112 Откуда: Москва
|
Добавлено: Ср Фев 01, 2006 4:10 pm Заголовок сообщения: |
|
|
Тут дело не в обучающих выборках.
1) Ничего сложного в данных, действительно, нет.
2) Даже если бы данные были случайными, в конкретном случае приведенные вами конфигурации их бы просто запоминали.
Я попробовал загрузить ваши данные в NeuroShell, сети именно такие, какие вы указывали. Сети обучаются за неисчислимо малое время со 100% верным результатом.
Поэтому тут дело скорее в неверно реализованном алгоритме обратного распространения. |
|
| Вернуться к началу |
|
 |
dmitrdv Новый посетитель

Зарегистрирован: 02 Фев 2006 Сообщения: 10 Откуда: екатеринбург
|
Добавлено: Вс Фев 05, 2006 8:40 pm Заголовок сообщения: Re: Программная реализация BackProp алгоритма |
|
|
| Куркин Дмитрий писал(а): | Попробовал создать собственную сеть. Вроде получилось (имеется ввиду только способность сети выдавать корректные выходные значения на входные данные). Когда дело доходит до обучения, ничего не получается: все веса изменяются циклически: сначала слегка растут, потом также слегка уменьшаются, в итоге остаются примерно одинаковыми - процесс обучения никогда не заканчивается (так как ошибка на выходе при этом всегда остаётся огромная). У меня есть подозрения, что заданы некорректные обучающие выборки:
x1=[1, 0, 0, 0] y1=[1, 0]
x2=[0, 1, 0, 0] y1=[1, 0]
x3=[0, 0, 1, 0] y1=[0, 1]
x4=[0, 0, 0, 1] y1=[0, 1] при конфигурации сети: 4-3-2 для одного случая и:
x1=[0, 0] y1=[0]
x1=[0, 1] y1=[1]
x1=[1, 0] y1=[1]
x1=[1, 1] y1=[0] при конфигурации сети 2-2-1 для другого.
Что делать? Мож кто с этим уже сталкивался? |
Начал реализовывать алгоритм обратного распространения ошибки и обнаружил что он не работает!!!
Может кто нидь кинет ссылку на точно правильный алгоритм - я смотрел на
Или посмотрите на http://ai.obrazec.ru/forum/viewtopic.php?t=632
На этом форуме я не могу прикрепить файл - а формулы не могу вставить текст. А на том форуме в прикрепленном файле я сделал ручной расчет в течении 2 итераций и ничего не получилось
Я максимально упростил сеть – взял один нейрон с одним входом (с весом = 1) и одним выходом f(x) = X2, смещение = 0. На вход подаю 2, на выходе хочу получить 3.
В прикрепленном файле приведены две итерации функционирования алгоритма, - и значение, которое я получаю на выходе, постоянно растет, нисколько не приближаясь к 3!!!! В чем ошибка? |
|
| Вернуться к началу |
|
 |
Куркин Дмитрий Новый посетитель

Зарегистрирован: 23 Янв 2006 Сообщения: 12 Откуда: Челябинск
|
Добавлено: Пн Фев 06, 2006 12:43 pm Заголовок сообщения: |
|
|
| А вообще, как должны вести себя выходы сети после одной итерации алгоритма? Я имею ввиду, значения выходов должны стать чуть ближе к значениям, заданным обучающей выборкой или это не обязательно? В моём случае они крутились вокруг каких-то промежуточных значений. Впечатление такое, что им что-то не давало изменяться дальше. |
|
| Вернуться к началу |
|
 |
Victor G. Tsaregorodtsev Эксперт

Зарегистрирован: 28 Июн 2005 Сообщения: 114 Откуда: Красноярск
|
Добавлено: Пн Фев 06, 2006 12:52 pm Заголовок сообщения: |
|
|
| Куркин Дмитрий писал(а): | | А вообще, как должны вести себя выходы сети после одной итерации алгоритма? Я имею ввиду, значения выходов должны стать чуть ближе к значениям, заданным обучающей выборкой или это не обязательно? |
Не обязательно. Величина шага может быть такой большой, что сетка перескочит через локальный минимум по направлению градиента и точка, соответствующая новым значениям синапсов, окажется на противоположной стороне "оврага" рельефа целевой функции при бОльшем значении и самой целевой функции. Соответственно, и выходы сети станут дальше от эталонных.
Т.е. если у нас сечение рельефа целевой функции направлением градиента дает параболку и текущее положение (определяемое весами синапсов сети) сети - на одной из ветвей параболы, то можно прыгнуть на противоположную ветвь в то значение аргумента (набора весов после коррекции), которому будет соответствовать бОльшее по сравнению с начальным значение функции. _________________ www.neuropro.ru - нейросети, анализ данных, прогнозирование |
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|