.NET 4.x Нейронная сеть не работает. Почему? - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. using System; //Neiron
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Web.Script.Serialization;
  10. using System.Windows.Forms;
  11. namespace NeiroNet1
  12. {
  13. // это по сути контейнер для массива нейронов neironArray
  14. // загружет его при создании из файла и сохраняет при выходе
  15. class NeiroWeb
  16. {
  17. public const int neironInArrayWidth = 10; // количество по горизонтали
  18. public const int neironInArrayHeight = 10; // количество по вертикали
  19. private const string memory = "memory.txt"; // имя файла хранения сети
  20. private List<Neiron> neironArray = null; // массив нейронов
  21. // конструктор
  22. public NeiroWeb()
  23. {
  24. neironArray = InitWeb();
  25. }
  26. // функция открывает текстовой файл и преобразовывает его в массив нейронов
  27. private static List<Neiron> InitWeb()
  28. {
  29. if (!File.Exists(memory)) return new List<Neiron>();
  30. string[] lines = File.ReadAllLines(memory);
  31. if (lines.Length == 0) return new List<Neiron>();
  32. string jStr = lines[0];
  33. JavaScriptSerializer json = new JavaScriptSerializer();
  34. List<Object> objects = json.Deserialize<List<Object>>(jStr);
  35. List<Neiron> res = new List<Neiron>();
  36. foreach (var o in objects) res.Add(NeironCreate((Dictionary<string,Object>)o));
  37. return res;
  38. }
  39. // преобразовать структуру данных в клас нейрона
  40. private static Neiron NeironCreate(Dictionary<string, object> o)
  41. {
  42. Neiron res = new Neiron();
  43. res.name = (string)o["name"];
  44. res.countTrainig = (int)o["countTrainig"];
  45. Object[] veightData = (Object[])o["veight"];
  46. int arrSize = (int)Math.Sqrt(veightData.Length);
  47. res.veight = new double[arrSize, arrSize];
  48. int index = 0;
  49. for (int n = 0; n < res.veight.GetLength(0); n++)
  50. for (int m = 0; m < res.veight.GetLength(1); m++)
  51. {
  52. res.veight[n, m] = Double.Parse(veightData[index].ToString());
  53. index++;
  54. }
  55. return res;
  56. }
  57. // функция сравнивает входной массив с каждым нейроном из сети и
  58. // возвращает имя нейрона наиболее похожего на него
  59. // именно эта функция отвечает за распознавание образа
  60. public string CheckLitera(int[,] arr)
  61. {
  62. string res = null;
  63. double max = 0;
  64. foreach (var n in neironArray)
  65. {
  66. double d = n.GetRes(arr);
  67. if (d > max)
  68. {
  69. max = d;
  70. res = n.GetName();
  71. }
  72. }
  73. return res;
  74. }
  75. // функция сохраняет массив нейронов в файл
  76. public void SaveState()
  77. {
  78. JavaScriptSerializer json = new JavaScriptSerializer();
  79. string jStr = json.Serialize(neironArray);
  80. System.IO.StreamWriter file = new System.IO.StreamWriter(memory);
  81. file.WriteLine(jStr);
  82. file.Close();
  83. }
  84. // получить список имён образов, имеющихся в памяти
  85. public string[] GetLiteras()
  86. {
  87. var res = new List<string>();
  88. for (int i = 0; i < neironArray.Count; i++) res.Add(neironArray[i].GetName());
  89. res.Sort();
  90. return res.ToArray();
  91. }
  92. // эта функция заносит в память нейрона с именем trainingName
  93. // новый вариант образа data
  94. public void SetTraining(string trainingName, int[,] data)
  95. {
  96. Neiron neiron = neironArray.Find(v => v.name.Equals(trainingName));
  97. if (neiron == null) // если нейрона с таким именем не существует, создадим новыи и добавим
  98. { // его в массив нейронов
  99. neiron = new Neiron();
  100. neiron.Clear(trainingName, neironInArrayWidth, neironInArrayHeight);
  101. neironArray.Add(neiron);
  102. }
  103. int countTrainig = neiron.Training(data); // обучим нейрон новому образу
  104. string messageStr = "Имя образа - " + neiron.GetName() +
  105. " вариантов образа в памяти - " + countTrainig.ToString();
  106. // покажем визуальное отображение памяти обученного нейрона
  107. Form resultForm = new ShowMemoryVeight(neiron);
  108. resultForm.Text = messageStr;
  109. resultForm.Show();
  110. }
  111.  
  112. }
  113. }
Листинг программы
  1. using System; //NeiroWeb
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Web.Script.Serialization;
  10. using System.Windows.Forms;
  11. namespace NeiroNet1
  12. {
  13. // это по сути контейнер для массива нейронов neironArray
  14. // загружет его при создании из файла и сохраняет при выходе
  15. class NeiroWeb
  16. {
  17. public const int neironInArrayWidth = 10; // количество по горизонтали
  18. public const int neironInArrayHeight = 10; // количество по вертикали
  19. private const string memory = "memory.txt"; // имя файла хранения сети
  20. private List<Neiron> neironArray = null; // массив нейронов
  21. // конструктор
  22. public NeiroWeb()
  23. {
  24. neironArray = InitWeb();
  25. }
  26. // функция открывает текстовой файл и преобразовывает его в массив нейронов
  27. private static List<Neiron> InitWeb()
  28. {
  29. if (!File.Exists(memory)) return new List<Neiron>();
  30. string[] lines = File.ReadAllLines(memory);
  31. if (lines.Length == 0) return new List<Neiron>();
  32. string jStr = lines[0];
  33. JavaScriptSerializer json = new JavaScriptSerializer();
  34. List<Object> objects = json.Deserialize<List<Object>>(jStr);
  35. List<Neiron> res = new List<Neiron>();
  36. foreach (var o in objects) res.Add(NeironCreate((Dictionary<string,Object>)o));
  37. return res;
  38. }
  39. // преобразовать структуру данных в клас нейрона
  40. private static Neiron NeironCreate(Dictionary<string, object> o)
  41. {
  42. Neiron res = new Neiron();
  43. res.name = (string)o["name"];
  44. res.countTrainig = (int)o["countTrainig"];
  45. Object[] veightData = (Object[])o["veight"];
  46. int arrSize = (int)Math.Sqrt(veightData.Length);
  47. res.veight = new double[arrSize, arrSize];
  48. int index = 0;
  49. for (int n = 0; n < res.veight.GetLength(0); n++)
  50. for (int m = 0; m < res.veight.GetLength(1); m++)
  51. {
  52. res.veight[n, m] = Double.Parse(veightData[index].ToString());
  53. index++;
  54. }
  55. return res;
  56. }
  57. // функция сравнивает входной массив с каждым нейроном из сети и
  58. // возвращает имя нейрона наиболее похожего на него
  59. // именно эта функция отвечает за распознавание образа
  60. public string CheckLitera(int[,] arr)
  61. {
  62. string res = null;
  63. double max = 0;
  64. foreach (var n in neironArray)
  65. {
  66. double d = n.GetRes(arr);
  67. if (d > max)
  68. {
  69. max = d;
  70. res = n.GetName();
  71. }
  72. }
  73. return res;
  74. }
  75. // функция сохраняет массив нейронов в файл
  76. public void SaveState()
  77. {
  78. JavaScriptSerializer json = new JavaScriptSerializer();
  79. string jStr = json.Serialize(neironArray);
  80. System.IO.StreamWriter file = new System.IO.StreamWriter(memory);
  81. file.WriteLine(jStr);
  82. file.Close();
  83. }
  84. // получить список имён образов, имеющихся в памяти
  85. public string[] GetLiteras()
  86. {
  87. var res = new List<string>();
  88. for (int i = 0; i < neironArray.Count; i++) res.Add(neironArray[i].GetName());
  89. res.Sort();
  90. return res.ToArray();
  91. }
  92. // эта функция заносит в память нейрона с именем trainingName
  93. // новый вариант образа data
  94. public void SetTraining(string trainingName, int[,] data)
  95. {
  96. Neiron neiron = neironArray.Find(v => v.name.Equals(trainingName));
  97. if (neiron == null) // если нейрона с таким именем не существует, создадим новыи и добавим
  98. { // его в массив нейронов
  99. neiron = new Neiron();
  100. neiron.Clear(trainingName, neironInArrayWidth, neironInArrayHeight);
  101. neironArray.Add(neiron);
  102. }
  103. int countTrainig = neiron.Training(data); // обучим нейрон новому образу
  104. string messageStr = "Имя образа - " + neiron.GetName() +
  105. " вариантов образа в памяти - " + countTrainig.ToString();
  106. // покажем визуальное отображение памяти обученного нейрона
  107. Form resultForm = new ShowMemoryVeight(neiron);
  108. resultForm.Text = messageStr;
  109. resultForm.Show();
  110. }
  111.  
  112. }
  113. }
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Windows.Forms;
  6. namespace NeiroNet1
  7. {
  8. static class Program
  9. {
  10. /// <summary>
  11. /// Главная точка входа для приложения.
  12. /// </summary>
  13. [STAThread]
  14. static void Main()
  15. {
  16. Application.EnableVisualStyles();
  17. Application.SetCompatibleTextRenderingDefault(false);
  18. Application.Run(new MainForm());
  19. }
  20. }
  21. }

Решение задачи: «.NET 4.x Нейронная сеть не работает. Почему?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Web.Script.Serialization;
  10. using System.Windows.Forms;
  11.  
  12. namespace NeiroNet1
  13. {
  14.     // это по сути контейнер для массива нейронов neironArray
  15.     // загружет его при создании из файла и сохраняет при выходе
  16.  
  17.     class NeiroWeb
  18.     {
  19.        
  20.         public  const int          neironInArrayWidth  =           10; // количество по горизонтали
  21.         public  const int          neironInArrayHeight =           10; // количество по вертикали
  22.         private const string       memory              = "memory.txt"; // имя файла хранения сети
  23.         private       List<Neiron> neironArray         =         null; // массив нейронов
  24.  
  25.         // конструктор
  26.         public NeiroWeb()
  27.         {
  28.             neironArray = InitWeb();            
  29.         }
  30.  
  31.         // функция открывает текстовой файл и преобразовывает его в массив нейронов
  32.         private static List<Neiron> InitWeb()
  33.         {
  34.             if (!File.Exists(memory)) return new List<Neiron>();
  35.             string[] lines = File.ReadAllLines(memory);
  36.             if (lines.Length == 0)    return new List<Neiron>();
  37.             string jStr = lines[0];
  38.             JavaScriptSerializer json = new JavaScriptSerializer();
  39.             List<Object> objects = json.Deserialize<List<Object>>(jStr);
  40.             List<Neiron> res = new List<Neiron>();
  41.             foreach (var o in objects) res.Add(NeironCreate((Dictionary<string,Object>)o));
  42.             return res;
  43.         }
  44.  
  45.         // преобразовать структуру данных в клас нейрона
  46.         private static Neiron NeironCreate(Dictionary<string, object> o)
  47.         {
  48.             Neiron res = new Neiron();
  49.             res.name = (string)o["name"];
  50.             res.countTrainig = (int)o["countTrainig"];
  51.             Object[] veightData = (Object[])o["veight"];
  52.             int arrSize = (int)Math.Sqrt(veightData.Length);
  53.             res.veight = new double[arrSize, arrSize];
  54.             int index = 0;
  55.             for (int n = 0; n < res.veight.GetLength(0); n++)
  56.                 for (int m = 0; m < res.veight.GetLength(1); m++)
  57.                 {
  58.                     res.veight[n, m] = Double.Parse(veightData[index].ToString());
  59.                     index++;
  60.                 }
  61.             return res;
  62.         }
  63.  
  64.         // функция сравнивает входной массив с каждым нейроном из сети и
  65.         // возвращает имя нейрона наиболее похожего на него
  66.         // именно эта функция отвечает за распознавание образа
  67.  
  68.         public string CheckLitera(int[,] arr)
  69.         {
  70.             string res = null;
  71.             double max = 0;
  72.             foreach (var n in neironArray)
  73.             {
  74.                 double d = n.GetRes(arr);
  75.                 if (d > max)
  76.                 {
  77.                     max = d;
  78.                     res = n.GetName();
  79.                 }
  80.             }
  81.             return res;
  82.         }
  83.  
  84.         // функция сохраняет массив нейронов в файл
  85.         public void SaveState()
  86.         {
  87.             JavaScriptSerializer json = new JavaScriptSerializer();
  88.             string jStr = json.Serialize(neironArray);
  89.             System.IO.StreamWriter file = new System.IO.StreamWriter(memory);
  90.             file.WriteLine(jStr);
  91.             file.Close();
  92.         }      
  93.  
  94.         // получить список имён образов, имеющихся в памяти
  95.         public string[] GetLiteras()
  96.         {
  97.             var res = new List<string>();
  98.             for (int i = 0; i < neironArray.Count; i++) res.Add(neironArray[i].GetName());
  99.             res.Sort();
  100.             return res.ToArray();
  101.         }
  102.  
  103.         // эта функция заносит в память нейрона с именем trainingName
  104.         // новый вариант образа data
  105.        
  106.         public void SetTraining(string trainingName, int[,] data)
  107.         {
  108.             Neiron neiron = neironArray.Find(v => v.name.Equals(trainingName));
  109.             if (neiron == null) // если нейрона с таким именем не существует, создадим новыи и добавим
  110.             {                   // его в массив нейронов
  111.                 neiron = new Neiron();
  112.                 neiron.Clear(trainingName, neironInArrayWidth, neironInArrayHeight);
  113.                 neironArray.Add(neiron);
  114.             }
  115.             int countTrainig = neiron.Training(data); // обучим нейрон новому образу
  116.             string messageStr = "Имя образа - " + neiron.GetName() +
  117.                                 " вариантов образа в памяти - " + countTrainig.ToString();
  118.  
  119.             // покажем визуальное отображение памяти обученного нейрона
  120.             Form resultForm = new ShowMemoryVeight(neiron);
  121.             resultForm.Text = messageStr;
  122.             resultForm.Show();
  123.         }
  124.  
  125.        
  126.     }
  127. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы