Читаем Основы нейросетей полностью

var value = byte.Parse(values[i]); //var value = (values[i] == "0") ? 0 : 1;

layerAssotiations[

byte.Parse(values[0]),

(i – 1) / IMAGE_SIZE,

(i – 1) % IMAGE_SIZE]

+= value;

}

}

}


private static void test

{

Console.WriteLine("Начало тестирования нейросети");

var indeх = 1;

var rows = File.ReadAllLines(FILE_PATH).Skip(1 + TRAIN_ROWS_COUNT).Take(TEST_ROWS_COUNT).ToList;


foreach (var row in rows)

{

Console.WriteLine("Итерация {0} из {1}", indeх++, TEST_ROWS_COUNT);

clearResultLayer;


var values = row.Split(',');

for (int i = 1; i < values.Length; i++)

{

var value = byte.Parse(values[i]);

for (int j = 0; j < SAMPLE_COUNT; j++)

{

if (value > 0)

{

var weight = layerAssotiations[

j,

(i – 1) / IMAGE_SIZE,

(i – 1) % IMAGE_SIZE];

layerResult[j] += (weight >= 0) ? weight : -INCORRECT_PENALTY;

}

}

}


calculateStatistics(byte.Parse(values[0]));

}

}


private static void clearResultLayer

{

layerResult = new Dictionary;

for (int i = 0; i < SAMPLE_COUNT; i++) layerResult[i] = 0;

}


private static void calculateStatistics(byte correctNumber)

{

var proposalNumber = layerResult.OrderByDescending(p => p.Value).First.Key;

Console.WriteLine("Число {0} определено как {1} {2}", correctNumber, proposalNumber,

proposalNumber == correctNumber ? "УСПЕХ" : "НЕУДАЧА");

if (proposalNumber == correctNumber) correctResults++;

}

}

}




Источник фото




Источник фото

5 Нейросеть Matt Mazur

Сделал, наконец, рабочий пример нейросети (НС). Сначала прочитал теорию – объяснение механизма back propagation из русской вики. Вроде все понятно. За вечер написал программу для анализа цифр 0..9 из базы MNIST. Программа запускается, веса обновляются, работа кипит. У любого программиста есть вера в чудо. Что программа, которая компилируется при первом запуске сразу сработает корректно. Да, но нет, девочки. На выходе – 10% распознанных цифр. Ерунда, короче. Как если бы цифра определялась случайным образом.


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


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


2) Не сказано, что после подсчета дельт для изменения весов на каждом слое, обновлять веса ребер нужно один раз для всех слоев сразу, а не сразу после подсчета каждой дельты.


3) Для скрытых слоев в правиле подсчета дельт сказано, что нужно умножить на веса исходящих ребер на их дельты. Это не так. Не дельты, а 3 из 4-х множителей в дельте. Т.е. из дельт нужно исключить сигнал на предыдущем узле. Т.е. умножить на: (Tj-Oj)*Oj*(1-Oj), а не на (Tj-Oj)*Oj*(1-Oj)*On, где n=j-1


4) Ничего не сказано про архитектуру слоев и ребер. Должны ли они быть Full-connected [FC] (каждый узел соединен с каждым следующим) и как изменить алгоритм если у нас не FC-слои.


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


6) Полно туманных разъяснений вида "ну, тут очевидно – надо взять частную производную dE/dw". Ага, очевидно. Целыми днями только этим и занимаюсь.


7) Нет нормального примера простой НС с проставленными числами для каждого сигнала, веса, узла и расчета как это считается хотя бы на одной итерации.


8) Неясно, нужно ли нормализовать входные сигналы (из 0..255, например, делать числа в интервале 0..1).


9) Говорят, в начале нужно выставить маленькие значения весов ребер. Неясно, насколько малые. 0..1 или 0..0,001?


Правильно говорят, нужна своя, православная вики за 2 млрд руб!


Надо бы залить на вики свой алгоритм работы НС с примером подсчета. Не знаю, почему так ужасно объясняют на русской вики. Возможно это диверсия. Т.е. админы все написали понятно, но каждую ночь на страницу заходят враги отечества из-за границы (и не только) и запутывают описание алгоритма.


Есть такая теория заговора, что в школах и университетах СССР специально так ужасно преподают английский, чтобы народ не разбежался по заграницам сразу после выпуска. Федеральная программа по противодействию утечке мозгов. Или как-то так. Товарищ майор, если я случайно раскрыл гос. тайну, подайте знак.


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


Ссылка: A Step by Step Backpropagation Eхample by Matt Mazur

https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/


Сделал реализацию по статье и вуаля! Все работает! См. код в конце статьи и на скринах.


Перейти на страницу:

Похожие книги

Бухгалтерский учет на компьютере
Бухгалтерский учет на компьютере

Эта книга для пользователей (преимущественно – начинающих бухгалтеров), нуждающихся в получении навыков работы с бухгалтерским ПО. В частности, с конфигурацией 1С: Бухгалтерия 8 – самой популярной и распространенной на данный момент бухгалтерской системой в России. В книге будут рассмотрены следующие основные вопросы: основные понятия и устройство программы, начало работы: сведения об организации, заполнение справочников, настройка параметров учета и учетная политика, ввод начальных остатков, учет капитала, учет денежных средств, зарплата и кадры, расчеты с подотчетными лицами, основные средства и нематериальные активы, материалы и товары, налоги, бухгалтерская отчетность.

Александр Александрович Заика , Александр Заика

Деловая литература / Финансы / Прочая компьютерная литература / Бухучет и аудит / Финансы и бизнес / Книги по IT
Самоучитель работы на компьютере: быстро, легко, эффективно
Самоучитель работы на компьютере: быстро, легко, эффективно

Тот факт, что умение работать на компьютере сегодня необходимо всем и каждому, не вызывает сомнений даже у скептиков.Книга, которую вы держите в руках, будет настоящим другом и помощником для тех, кто желает самостоятельно и в короткие сроки освоить премудрости работы на персональном компьютере. Написанная простым и понятным языком, она доступна и легка даже для новичков. Большое количество конкретных примеров и наглядных иллюстраций способствует быстрому и легкому усвоению предлагаемого материала.Его последовательное изложение, а также подробное пошаговое описание ключевых операций и процедур превращают изучение данной книги в увлекательный процесс, результатом которого будет умение общаться на «ты» с любым современным компьютером.Описание построено на примере системы Windows XP Professional.

Алексей Анатольевич Гладкий

Руководства / Прочая компьютерная литература / Книги по IT / Словари и Энциклопедии