Нейронная сеть [C#]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by [0rby], 11 Dec 2010.

  1. [0rby]

    [0rby] Banned

    Joined:
    9 Jul 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Хочу спросить, почему класс perceptron после обучения функцией teach() выдает неверные ответы, причем все время?

    Вот весь код:

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace neuron
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                perceptron p = new perceptron(64);
    
                int[] v1 = {1, 1, 1, 1, 1, 1, 1, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 0, 0, 0, 0, 0, 0, 1,
    		                1, 1, 1, 1, 1, 1, 1, 1};
                p.teach(v1, 1);
    
                int[] v2 = {0, 1, 1, 1, 1, 1, 1, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 0, 0, 0, 0, 0, 1,
    		              0, 1, 1, 1, 1, 1, 1, 1};
                p.teach(v2, 1);
    
                int[] v3 = {
                          0, 0, 0, 0, 0, 0, 0, 0,
    		              1, 1, 1, 1, 1, 1, 1, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 1, 1, 1, 1, 1, 1, 1,
                          };
                p.teach(v3, 1);
    
                int[] v4 = {0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              1, 1, 1, 1, 1, 1, 1, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 1, 1, 1, 1, 1, 1, 1};
                p.teach(v4, 1);
    
                int[] v5 = {0, 0, 1, 1, 1, 1, 1, 1,
    		              0, 0, 1, 0, 0, 0, 0, 1,
    		              0, 0, 1, 0, 0, 0, 0, 1,
    		              0, 0, 1, 0, 0, 0, 0, 1,
    		              0, 0, 1, 0, 0, 0, 0, 1,
    		              0, 0, 1, 0, 0, 0, 0, 1,
    		              0, 0, 1, 1, 1, 1, 1, 1,
    		              0, 0, 0, 0, 0, 0, 0, 0};
                p.teach(v5, 1);
    
                int[] v6 = {1, 1, 1, 1, 1, 1, 1, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 0, 0, 0, 0, 0, 0, 1,
    		              1, 1, 1, 1, 1, 1, 1, 1};
                p.teach(v6, 1);
    
    
                int[] d1 = {
                          1, 1, 1, 1, 1, 1, 1, 1,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0};
                p.teach(d1, 0);
    
                int[] d2 = {
                          0, 0, 0, 0, 0, 0, 0, 1,
    		              0, 0, 0, 0, 0, 0, 1, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 1, 0, 0, 0,
    		              0, 0, 0, 1, 0, 0, 0, 0,
    		              0, 0, 1, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              1, 0, 0, 0, 0, 0, 0, 0};
                p.teach(d2, 0);
    
                int[] d3 = {
                          0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              1, 1, 1, 1, 1, 1, 1, 1,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0};
                p.teach(d3, 0);
    
                int[] d4 = {
                          0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0};
                p.teach(d4, 0);
    
                int[] d5 = {
                          1, 0, 0, 0, 0, 0, 0, 0,
    		              0, 1, 0, 0, 0, 0, 0, 0,
    		              0, 0, 1, 0, 0, 0, 0, 0,
    		              0, 0, 0, 1, 0, 0, 0, 0,
    		              0, 0, 0, 0, 1, 0, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 0, 1, 0,
    		              0, 0, 0, 0, 0, 0, 0, 1};
                p.teach(d5, 0);
    
                int[] d6 = {
                          0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0,
    		              0, 0, 0, 0, 0, 1, 0, 0};
                p.teach(d6, 0);
    
    
                int[] a = {
                          0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 1, 1, 1, 1, 0,
    		              0, 0, 0, 1, 0, 0, 1, 0,
    		              0, 0, 0, 1, 0, 0, 1, 0,
    		              0, 0, 0, 1, 1, 1, 1, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0,
    		              0, 0, 0, 0, 0, 0, 0, 0
                          };
                MessageBox.Show(p.ask(a).ToString());
            }
        }
    
        public class perceptron
        {
            int[] W;
            int size;
            int porog;
    
            public perceptron(int n)
            {
                size = n;
                porog = 100;
                init_weight();
            }
    
            public int ask(int[] vector)
            {
                int sum = 0;
    
                for (int i = 0; i < vector.Length; i++)
                {
                    sum += vector[i] * W[i];
                }
    
                if (sum > porog)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
    
            public void init_weight()
            {
                this.W = new int[size];
                for(int i=0;i<size;i++)
                {
                    this.W[i] = new Random().Next(0, 10); 
                }
            }
    
            public void teach(int[] vector, int d)
            {
                if (d != this.ask(vector))
                {
                    for (int i = 0; i < size; i++)
                    {
                        W[i] = d * vector[i];
                    }
                }
            }
        }
    }
    
    
     
    #1 [0rby], 11 Dec 2010
    Last edited: 11 Dec 2010
  2. PaRaBe1LuM

    PaRaBe1LuM Member

    Joined:
    15 Jan 2010
    Messages:
    0
    Likes Received:
    10
    Reputations:
    5
    больше похоже на "помогите в создании антикапчера ВК" :) гдето уже видел похожие посто просто)
     
  3. [0rby]

    [0rby] Banned

    Joined:
    9 Jul 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    PaRaBe1LuM, не в коем случае) просто хочу найти ошибку и попрактиковаться в этом деле, а вообще интересно все это)
     
    #3 [0rby], 12 Dec 2010
    Last edited: 12 Dec 2010
  4. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    По коду замечание: если известно кол-во элементов сети почему бы не определить сразу размер.
    А вообще python как раз и предназначен для работы с сетями.
    И вообще ты понимаешь что такое обучение?
    (кратко)Это когда есть эталон и твоя сеть, вот ты обучаешь свою сеть чтобы она стремилась к эталону, причем цикл обучения может продолжаться очень много раз(в зависимости от размера сети)... .
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    И давно это случилось? Какие вам известны хорошие библиотеки под питон кроме FANN?
     
    _________________________
    1 person likes this.
  6. Renji

    Renji Member

    Joined:
    5 Dec 2010
    Messages:
    24
    Likes Received:
    5
    Reputations:
    0
    Вообще самым приспособленным к нейронным сетям считаются С/С++ и его производные.
     
  7. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    чувак если ты говоришь это, значит ты никогда не работал с нейронными сетями в python там все делается элемантарно=)
     
  8. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Приведи пример чем лучше с/с++ чем питон=)
    уверен ты не найдешь плюсов=)
     
  9. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Ключевое слово тут все, а не только ИНС, да и если так пишешь попробую MATLAB.
     
  10. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    ох, простите, но что это за анусай написан вместо кода ? Я чета там алгоритма обучения, да и вообще ничего связанного с НС вообще не увидел кроме название классов :)

    Ты читал что такое персептрон ? а многослойный ? а методы его обучения ? например алгоритм обратного распространения ошибки ? А то как нужно обучать НС, то как это делать правильно и как делать не стоит ? О том когда стоит остановиться в обучении и о том каким должен быть набор обучающих данных ?

    прочитай хотябы десяток статей на этот счет. Потом бери FANN там есть обучающие примеры, посмотри как они сделаны. И юзай лучшее ее нежели свою самоделку.

    Но опять таки без теоретических основ это будет как говном об стену.
     
    #10 cupper, 13 Dec 2010
    Last edited: 13 Dec 2010
  11. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    ТС слишком большой разброс 0 и 1 в обучаемых примерах, чтобы эта НС работала, надо максимально больше примеров, которая близка к эталону, тогда сеть более менее будет работать.

    Ты бы к примеру бы тоже растерялся куда двигаться, если бы оказался к примеру в 10 - мерном простанстве.