Обсуждение статьи "Нейронные сети - от теории к практике" - страница 8

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
sigma7i
1261
sigma7i  

Классная статья!!!
Вот только остался открытым вопрос примера системы из 2-х и более нейронов.


Может у кого есть простенький пример 2-х, 3-х нейронного советника?

Dmitriy Parfenovich
5239
Dmitriy Parfenovich  
sigma7i:

Классная статья!!!
Вот только остался открытым вопрос примера системы из 2-х и более нейронов.


Может у кого есть простенький пример 2-х, 3-х нейронного советника?

Планировалась вторя статья по этому вопросу, но пока времени нет.

Попробуйте такую конструкцию

double out_net; //результат сети
double out[2];  //результаты первого слоя нейронов

out[0]=CalculateNeuron(inputs0,weight0); //вычислим первый нейрон в первом слое
out[1]=CalculateNeuron(inputs1,weight1); //вычислим второй нейрон в первом слое
out_net=CalculateNeuron(out,weight2);    //вычислим выходной нейрон сети
Думаю идея ясна.

 

sigma7i
1261
sigma7i  
fyords:

Попробуйте такую конструкцию

Думаю идея ясна.

 

Все предельно ясно, спасибо!

Здесь получается, что количество весовых коэффициентов удваиваются с каждым нейроном, но тут уже дело творческое :)

Буду ждать статью!  

qwertiy
5
qwertiy  

Объясните пожалуйста:

Допустим, обучил я перцептрон1 тестовой выборкой из файл1. Он научился предсказывать на 100% правильно этот же файл1.

Потом протестировал этот перцептрон1 на новых данных (файл2). Их он предсказал правильно на 95% процентов.

Как можно доучить перцептрон1?

Вариант 1:
Я склеиваю файл1 и файл2 = файл12. Обучаю с нуля перцетпрон2 скармливая ему файл12 + правильные ответы.

Вариант 2:

Я вручную корректирую правильные ответы в файл2 и дообучаю перцептрон1. 

 

 

Вариант 1 понятен. Это просто с нуля обучение нового перцептрона. 

А как осуществить вариант 2 ? Осуществим ли он? 

 =========

Сейчас экспериментирую в Jupyter-е на Питоне с библиотекой scikit-learn. Там у перцептрона нет метода чтобы доучить его новыми данными..

http://scikit-learn.org/dev/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier 

sklearn.neural_network.MLPClassifier — scikit-learn 0.18.dev0 documentation
  • scikit-learn.org
class hidden_layer_sizes=(100, ), activation='relu', algorithm='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1...
Boris Egorov
389
Boris Egorov  

Статья супер, наверно пока единственная с более менее подробным и понятным изложением,

хотелось бы попросить автора исправить картинку, все таки в этом примере рассматривается не сеть, а перцептрон,

и очень ждем  примера именно нейронной сети, например: 2 нейрона на входе, 3 в скрытом слое, 1 на выходе

большое спасибо за статью!

Файлы:
pyb.jpg 1958 kb
elibrarius
2758
elibrarius  

Изменение крутизны функции активации совершенно не нужно делать!

Смотрим формулу:

for(int n=0; n<10; n++) 
  {
   NET+=Xn*Wn;
  }
NET*=0.4;

При обучении сеть должна подбирать множители Wn. Если для сети выгоднее чтобы итог был *0,4, то она просто подберет все веса Wn, каждый из которых уже будет * 0.4. Т.е. просто внесем общий множитель в скобки, который сам и определится по минимуму ошибки.

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

Evgeniy Scherbina
27276
Evgeniy Scherbina  

Нормализация проводится неверно, а потом еще коэффициент 0.4 зачем-то...

Предположим, есть ряд значений: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Значения из этого ряда нужно привести к последовательности [0,1]. Логично предположить, что это будет ряд: 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.

Однако по вашей методике получаются просто случайные числа. Предположим, мы получаем значения из индикатора: 6, 7, 8, 9, 10. Упрощая вашу формулу:

Мы получаем:

6 >> 0

7 >> 0.25

8 >> 0.5

9 >> 0.75

10 >> 1

В этом ряду, нормализованном согласно указаниям из вашей статьи, верно только последнее значение.

Если у вас был в жизни курс линейной алгебры и вы можете отличить косинус от тангенса, то непонятно как можно так напортачить с такой простой задачей. Результаты вашей работы носят исключительно случайный характер!!

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

Boris Egorov
389
Boris Egorov  
Evgeniy Scherbina:

я суть ваших претензий не понял, а формула нормализации вообще классическая

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий