神经网络,它们如何看待编码?

时间:2010-07-01 17:01:12

标签: neural-network

基本上我知道神经网络的概念以及它是什么,但是我无法弄清楚它在编码时的外观或者你如何存储数据,我经历了很多在谷歌上发现的教程但是找不到任何代码,只是概念和算法。

任何人都可以给我一段简单的神经网络代码,比如“Hello World!”吗?

4 个答案:

答案 0 :(得分:7)

你主要需要的是一个物体,它代表一个神经元,与其他神经元(代表突触)及其重量具有相关关联。

典型的OOP语言中的单个神经元将类似于

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

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

  Function threshold;
}  

其中threshold表示应用于输入加权和的函数,以查看神经元是否激活自身并传播信号。

当然,您将需要特定的算法前馈网络或反向传播将对此数据结构进行操作的学习。

你可以开始实现的最简单的事情是 simple perceptron ,你可以找到一些信息here

答案 1 :(得分:7)

你说你已经熟悉了神经网络,但由于有许多不同类型的不同复杂度的神经网络(卷积,hebbian,kohonen地图等),我将讨论一个简单的前馈神经网络网络再次,只是为了确保我们在同一页面。

基本神经网络由以下内容组成

  1. 神经元
    1. 输入神经元
    2. 隐藏神经元(可选)
    3. 输出神经元
  2. 神经元之间的联系(有时称为与生物学类比的突触)
  3. 激活功能
  4. 神经元具有激活值。评估网络时,输入节点的激活将设置为实际输入。来自输入节点的链接通向更靠近输出的节点,通常是一层或多层隐藏节点。在每个神经元处,使用激活函数处理输入激活。可以使用不同的激活函数,有时它们甚至可以在单个网络的神经元内变化。

    激活功能将神经元的激活处理到它的输出中。早期实验通常使用简单的阈值函数(即激活>0.5≤1:0),现在经常使用Sigmoid function

    然后,激活函数的输出通过链接传播到下一个节点。每个链接都有一个应用于其输入的相关权重。

    最后,网络的输出是从输出神经元的激活中提取的。

    我整理了一个非常简单(而且非常详细......)的例子 here 。它是用Ruby编写的,并且计算AND,这很简单。

    一个更棘手的问题是如何实际创建一个有用的网络。该示例的简单网络是手动创建的,但这对于更复杂的问题是不可行的。我知道有两种方法,最常见的是backpropagation。较少使用的是neuroevolution,其中链接的权重是使用遗传算法确定的。

答案 2 :(得分:4)

AI-Junkie有一个很棒的tutorial on (A)NNs,他们有the code posted there

这是一个神经元(来自ai-junkie):

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);

};

这是一个神经元层(ai-junkie):

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);
};

就像我之前提到的那样......你可以通过ai-junkie(A)NN教程找到所有代码。

答案 3 :(得分: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()