private void Learning() { while (true) { if (isCanChange) //для синхронизации потоков { for (int k = 0; k < 10000; k++) //обучаем Х раз на одних и тех же данных { for (int i = 0; i < listPoints.Count; i++) { double[] inp = new double[] { listPoints[i].x, listPoints[i].y , 1};//(double) r.Next(-500, 500) / 234.0}; nn.feedForward(inp); //рассчитываем результат double[] targets = new double[] { listPoints[i].color, -listPoints[i].color }; nn.backpropagation(targets); //корректируем результат } } ReDraw(); //отображаем результат обучения } } }
private void ReDraw() { for (int i = 0; i < sizeX; i++) { for (int j = 0; j < sizeY; j++) { double[] inp = new double[] { i - x0, y0 - j }; double[] res = nn.feedForward(inp); try { bm.SetPixel(i, j, Color.FromArgb((byte)(255 * res[1]), 0, (byte)(255 * res[0]))); } catch {} } } for (int i = 0; i < listPoints.Count; i++) { Color color = Color.FromArgb((byte)(125 - 125 * listPoints[i].color), 0, (byte)(125 + 125 * listPoints[i].color)); graphics.FillEllipse(Brushes.White, (int)(x0 + (listPoints[i].x - 5)), (int)(y0 - (listPoints[i].y + 5)), 10, 10); graphics.FillEllipse(new SolidBrush(color), (int)(x0 + (listPoints[i].x - 4)), (int)(y0 - (listPoints[i].y + 4)), 8, 8); } pictureBox1.Image = (Image)bm; }