2010-07-01 11 views
13

असल में मैं एक तंत्रिका नेटवर्क की अवधारणा जानता हूं और यह क्या है, लेकिन मैं यह नहीं समझ सकता कि जब आप इसे कोड करते हैं या आप डेटा को कैसे स्टोर करते हैं, तो मैं यह देख सकता हूं कि मैं कई ट्यूटोरियल्स के माध्यम से गया जो मैंने Google पर पाया लेकिन नहीं कोड का कोई भी टुकड़ा नहीं ढूंढता, बस अवधारणाएं और एल्गोरिदम।तंत्रिका नेटवर्क, वे कोडिंग में कैसे दिखते हैं?

क्या कोई मुझे "हैलो वर्ल्ड!" जैसे कुछ सरल तंत्रिका नेटवर्क के कोड का एक टुकड़ा दे सकता है?

+1

के साथ एक सरल शुद्ध किस भाषा में है? –

+0

मैं इसे भाषा-अज्ञेयवादी के साथ टैग करूंगा। –

+0

संभावित डुप्लिकेट [एक तंत्रिका नेट पर स्पष्टीकरण जो सांप बजाता है] (http://stackoverflow.com/questions/42099814/clarification-on-a-neural-net-that-plays-snake) – devinbost

उत्तर

7

क्या आप मुख्य रूप से की जरूरत है एक वस्तु अन्य न्यूरॉन्स (कि synapses प्रतिनिधित्व करते हैं) और उनके वजन के साथ corrispective संघों के साथ एक एकल न्यूरॉन प्रतिनिधित्व करता है।

एक ठेठ OOP भाषा में एक एकल न्यूरॉन की तरह

class Synapse 
{ 
    Neuron sending; 
    Neuron receiving; 
    float weight; 
} 

class Neuron 
{ 
    ArrayList<Synapse> toSynapses; 
    ArrayList<Synapse> fromSynapses; 

    Function threshold; 
} 

कुछ जहां threshold समारोह है कि यदि न्यूरॉन ही सक्रिय करता है और संकेत प्रसारित देखने के लिए आदानों की भारित योग पर लागू किया जाता है का प्रतिनिधित्व करता हो जाएगा।

बेशक

तो आप फ़ीड आगे शुद्ध या के लिए विशिष्ट एल्गोरिथ्म की जरूरत है सीखने है कि इस डेटा संरचना पर कार्यवाही करेंगे बैक-प्रचार होगा।

सबसे आसान चीज जिसे आप कार्यान्वित करना शुरू कर सकते हैं, सरल perceptron होगा, आप कुछ infos here पा सकते हैं।

+0

कई अन्य प्रकार हैं एक साधारण वजन और दहलीज प्रकार की तुलना में, तंत्रिका जाल की। –

+0

बेशक वहाँ हैं, लेकिन हम कहीं से शुरू करने के बारे में बात कर रहे हैं .. और आप आमतौर पर एक साधारण चीज़ से शुरू होते हैं, फिर अन्य प्रकार के तंत्रिका नेटवर्क आमतौर पर सरल तत्वों की वास्तविकता (वास्तविक मस्तिष्क की तरह) पर निर्भर करते हैं – Jack

4

ऐ-गेम पसंद करने वाला एक महान tutorial on (A)NNs है और वे the code posted there है।

struct SNeuron 
{ 

    //the number of inputs into the neuron 
    int m_NumInputs; 

    //the weights for each input 
    vector<double> m_vecWeight; 

    //ctor 
    SNeuron(int NumInputs); 

}; 

यहाँ एक न्यूरॉन परत (ऐ-जंकी) है:

struct SNeuronLayer 
{ 
    //the number of neurons in this layer 
    int m_NumNeurons; 

    //the layer of neurons 
    vector<SNeuron> m_vecNeurons; 

    SNeuronLayer(int NumNeurons, int NumInputsPerNeuron); 
}; 

जैसा कि मैंने पहले उल्लेख ... आप पा सकते हैं

यहाँ (ऐ-जंकी से) एक न्यूरॉन है एआई-जुंकी (ए) एनएन ट्यूटोरियल के साथ सभी कोड।

+0

वाह यह साइट है बदसूरत ... लेकिन उपयोगी! –

+1

@ जस्टिन, सौंदर्य दर्शक की नजर में है;) – Kiril

+2

या बियरहोल्डर, जैसा भी मामला हो। –

7

आपने कहा कि आप पहले से ही तंत्रिका नेटवर्क से परिचित हैं, लेकिन अलग-अलग जटिलता (संक्रामक, हेबियन, कोहोनन मानचित्र इत्यादि) के कई प्रकार के तंत्रिका नेटवर्क हैं, इसलिए मैं एक साधारण फ़ीड-फॉरवर्ड पर जाउंगा तंत्रिका नेटवर्क फिर से, यह सुनिश्चित करने के लिए कि हम एक ही पृष्ठ पर हैं।

एक बुनियादी तंत्रिका नेटवर्क निम्नलिखित बातें होते

  1. न्यूरॉन्स
    1. इनपुट न्यूरॉन (रों)
    2. छिपा न्यूरॉन्स (वैकल्पिक)
    3. आउटपुट न्यूरॉन (रों)
  2. न्यूरॉन्स के बीच लिंक (कभी-कभी जीवविज्ञान के समानता में synapses कहा जाता है)
  3. एक सक्रियण समारोह

न्यूरॉन्स एक सक्रियण मूल्य है। जब आप किसी नेटवर्क का मूल्यांकन करते हैं, तो इनपुट नोड्स सक्रियण वास्तविक इनपुट पर सेट होता है।इनपुट नोड्स के लिंक नोड्स को आउटपुट के करीब ले जाते हैं, आमतौर पर छिपे हुए नोड्स की एक या अधिक परतों तक। प्रत्येक न्यूरॉन में, इनपुट सक्रियण को सक्रियण फ़ंक्शन का उपयोग करके संसाधित किया जाता है। विभिन्न सक्रियण कार्यों का उपयोग किया जा सकता है, और कभी-कभी वे एक नेटवर्क के न्यूरॉन्स के भीतर भी भिन्न होते हैं।

सक्रियण फ़ंक्शन न्यूरॉन के आउटपुट में सक्रियण को संसाधित करता है। शुरुआती प्रयोग आमतौर पर एक साधारण थ्रेसहोल्ड फ़ंक्शन (यानी सक्रियण> 0.5? 1: 0) का उपयोग करते थे, आजकल Sigmoid function अक्सर उपयोग किया जाता है।

सक्रियण फ़ंक्शन का आउटपुट तब अगले नोड्स के लिंक पर प्रचारित किया जाता है। प्रत्येक लिंक में एक संबंधित वजन होता है जो इसके इनपुट पर लागू होता है।

अंत में, नेटवर्क के आउटपुट को आउटपुट न्यूरॉन (ए) के सक्रियण से निकाला जाता है।

मैंने एक बहुत ही सरल (और बहुत verbose ...) उदाहरण एक साथ रखा है here। यह रूबी में लिखा गया है और गणना करता है और, जो जितना सरल हो उतना सरल है।

एक बहुत ही कठिन सवाल यह है कि वास्तव में ऐसा नेटवर्क कैसे बनाया जाए जो कुछ उपयोगी हो। उदाहरण का छोटा नेटवर्क मैन्युअल रूप से बनाया गया था, लेकिन यह अधिक जटिल समस्याओं के साथ अक्षम है। मुझे लगता है कि दो दृष्टिकोण हैं, सबसे आम backpropagation के साथ। कम इस्तेमाल neuroevolution है, जहां लिंक के वजन आनुवंशिक एल्गोरिदम का उपयोग करके निर्धारित किए जाते हैं।

1

यह is the NUPIC programmer's गाइड। NuPIC ढांचे उनके सिद्धांत (HTM) संरचना और नियोकॉर्टेक्स

के आपरेशन के आधार पर लागू करने के लिए है यह है कि वे कैसे परिभाषित HTM

HTM प्रौद्योगिकी मशीन सीखने में कई कठिन समस्याओं का समाधान करने की क्षमता है, अनुमान, और भविष्यवाणी। हमारे ग्राहकों के साथ खोज रहे कुछ एप्लिकेशन क्षेत्रों में छवियों में वस्तुओं को पहचानना, वीडियो में व्यवहार को पहचानना, स्पीकर के लिंग की पहचान करना, यातायात पैटर्न की भविष्यवाणी करना, गन्दा पाठ पर ऑप्टिकल कैरेक्टर मान्यता करना, चिकित्सा छवियों का मूल्यांकन करना और पैटर्न के माध्यम से क्लिक करना वेब पर।

इस nument 1,5

from nupic.network import * 
from nupic.network.simpledatainterface import WideDataInterface 
def TheNet(): 
    net=SimpleHTM(
      levelParams=[ 
      { # Level 0 
      }, 
      { # Level 1 
       'levelSize': 8, 'bottomUpOut': 8, 
       'spatialPoolerAlgorithm': 'gaussian', 
       'sigma': 0.4, 'maxDistance': 0.05, 
       'symmetricTime': True, 'transitionMemory': 1, 
       'topNeighbors': 2, 'maxGroupSize': 1024, 
       'temporalPoolerAlgorithm': 'sumProp' 
      }, 
      { # Level 2 
       'levelSize': 4, 'bottomUpOut': 4, 
       'spatialPoolerAlgorithm': 'product', 
       'symmetricTime': True, 'transitionMemory': 1, 
       'topNeighbors': 2, 'maxGroupSize': 1024, 
       'temporalPoolerAlgorithm': 'sumProp' 
      }, 
      { # Level 3 
       'levelSize': 1, 
       'spatialPoolerAlgorithm': 'product', 
       'mapperAlgorithm': 'sumProp' 
      },],) 

    Data=WideDataInterface('Datos/__Categorias__.txt', 'Datos/Datos_Entrenamiento%d.txt', numDataFiles = 8)# 

    net.createNetwork(Data) 
    net.train(Datos) 

if __name__ == '__main__': 
    print "Creating HTM Net..." 
    TheNet()