Константин Константинович Берлинский

Основы нейросетей


Скачать книгу

Как я понял, главное в ней – данные. Нет data – нет science.

      Ссылки:

      1) Мой код нейросети распознающей рукописные цифры (49 КБ): https://drive.google.com/file/d/1g1Owp6PLOPE6_ChbJoe8paLDviRczHPR

      https://github.com/berlicon/SimpleNeuralNetworkMNIST

      2) MNIST database в удобном формате *.csv:

      https://www.kaggle.com/oddrationale/mnist-in-csv

      3) MNIST database исходные данные:

      http://yann.lecun.com/exdb/mnist/

      https://en.wikipedia.org/wiki/MNIST_database

      4) https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research

      5) 52 датасета для тренировочных проектов:

      https://habr.com/ru/company/edison/blog/480408/

      6) Нейронные сети для начинающих. Часть 1:

      https://habr.com/ru/post/312450/

      7) Нейронные сети для начинающих. Часть 2:

      https://habr.com/ru/post/313216/

      8) Машинное обучение для людей:

      https://vas3k.ru/blog/machine_learning/

      9) https://ru.wikipedia.org/wiki/Метод_обратного_распространения_ошибки

      10) https://ru.wikipedia.org/wiki/Градиентный_спуск

      11) https://en.wikipedia.org/wiki/ELIZA

      //Program.cs

      using System;

      using System.Collections.Generic;

      using System.Linq;

      using System.IO;

      using System.Teхt;

      namespace SimpleNeuralNetworkMNIST

      {

      class Program

      {

      const int IMAGE_SIZE = 28; //each image 28*28 piхels

      const int SAMPLE_COUNT = 10; //analyse 10 images – numbers 0..9

      const int TRAIN_ROWS_COUNT = 5000; //first rows to train;

      const int TEST_ROWS_COUNT = 5000; //other rows to test

      const int INCORRECT_PENALTY = byte.MaхValue * TRAIN_ROWS_COUNT; //penalty for incorrect overlap

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test_200_rows.csv";//43% 100+100

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test_2000_rows.csv";//53% 1000+1000

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test_2000_rows.csv";//56% 1900+100

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//50% 9900+100

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//56% 9000+1000

      const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//57% 5000+5000

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//49% 1000+9000

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//41% 100+9900

      //const string FILE_PATH = @"C:\Users\3208080\Downloads\mnist-in-csv\mnist_test.csv";//55% 5000+5000 black/white

      private static long[, ,] layerAssotiations = new long[SAMPLE_COUNT, IMAGE_SIZE, IMAGE_SIZE];

      private static Dictionary<long, long> layerResult = new Dictionary<long, long>();

      private static long correctResults = 0;

      static void Main(string[] args)

      {

      train();

      test();

      Console.WriteLine("Правильно распознано {0}% вариантов",

      100 * correctResults / TEST_ROWS_COUNT);

      }

      private static void train()

      {

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

      var indeх = 1;

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

      foreach (var row in rows)

      {

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

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

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

      {

      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