Нейронные сети, как они выглядят в кодировании? - PullRequest
13 голосов
/ 01 июля 2010

В принципе, я знаю концепцию нейронной сети и что это такое, но я не могу понять, как она выглядит, когда вы ее кодируете, или как вы храните данные, я прошел много уроков, которые я нашел в Google, ноне могу найти ни одного куска кода, только концепции и алгоритмы.

Может кто-нибудь дать мне кусок кода простой нейронной сети, что-то вроде «Hello World!»?

Ответы [ 4 ]

7 голосов
/ 01 июля 2010

Вы сказали, что уже знакомы с нейронными сетями, но, поскольку существует много различных типов нейронных сетей различной сложности (сверточные, хеббовы, карты Кохонена и т. Д.), Я перейду к простой нейронной связи с прямой связью.сеть снова, просто чтобы убедиться, что мы находимся на той же странице.

Базовая нейронная сеть состоит из следующих вещей:

  1. Нейроны
    1. Входные нейроны)
    2. Скрытые нейроны (необязательно)
    3. Выходные нейроны
  2. Связи между нейронами (иногда называемые синапсами по аналогии с биологией)
  3. Функция активации

Нейроны имеют значение активации .Когда вы оцениваете сеть, активация входных узлов устанавливается на фактический ввод.Ссылки от входных узлов ведут к узлам ближе к выходу, обычно к одному или нескольким слоям скрытых узлов.В каждом нейроне активация входа обрабатывается с использованием функции активации .Можно использовать разные функции активации, и иногда они даже различаются в нейронах одной сети.

Функция активации обрабатывает активацию нейрона в его выход.В ранних экспериментах обычно использовалась простая пороговая функция (т.е. активация> 0,5 × 1: 0), в настоящее время часто используется сигмовидная функция .

Вывод функции активации затем распространяется по ссылкам на следующие узлы.Каждая ссылка имеет связанный вес, который применяется к ее входу.

Наконец, выход сети извлекается из активации выходного нейрона (ов).

Я собралочень простой (и очень многословный ...) пример здесь .Он написан на Ruby и вычисляет AND, что примерно так просто.

Гораздо более сложный вопрос - как на самом деле создать сеть, которая делает что-то полезное.Тривиальная сеть примера была создана вручную, но это невозможно при более сложных проблемах.Мне известны два подхода, наиболее распространенным из которых является обратное распространение .Менее используется нейроэволюция , где веса ссылок определяются с использованием генетического алгоритма.

7 голосов
/ 01 июля 2010

В основном вам нужен объект, представляющий один нейрон с соответствующими ассоциациями с другими нейронами (которые представляют синапсы) и их весами.

Один нейрон на типичном языке ООП будет выглядеть примерно так:

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

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

  Function threshold;
}  

, где threshold представляет функцию, которая применяется к взвешенной сумме входов, чтобы увидеть, активируется ли нейрон сам и распространяет ли сигнал.

Конечно, тогда вам понадобится специальный алгоритм для обратной связи сети или обратной передачи обучения, которое будет работать с этой структурой данных.

Самая простая вещь, которую вы могли бы реализовать - это простой персептрон , здесь вы можете найти некоторую информацию .

4 голосов
/ 01 июля 2010

AI-Junkie имеет отличный учебник по (A) NNs , и у них есть код, размещенный там .

Вот нейрон (от ай-наркомана):

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

Как я упоминал ранее ... вы можете найти весь код с помощью учебника ai-junkie (A) NN.

1 голос
/ 01 июля 2010

- это руководство программиста NUPIC. NuPIC является основой для реализации их теории (HTM), основанной на структуре и работе неокортекса

Вот как они определяют HTM

Технология HTM способна решить многие сложные проблемы машинного обучения, логического вывода и прогнозирования. Некоторые из областей применения, которые мы изучаем вместе с нашими клиентами, включают в себя распознавание объектов на изображениях, распознавание поведения в видео, определение пола говорящего, прогнозирование характера трафика, оптическое распознавание грязного текста, оценку медицинских изображений и прогнозирование шаблонов кликов через в сети.

это простая сеть с оттенком 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...