Нейронные сети, как они выглядят в кодировании?

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

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

Ответы

Ответ 1

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

Один нейрон в типичном языке ООП будет что-то вроде

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

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

  Function threshold;
}  

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

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

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

Ответ 2

Вы сказали, что уже знакомы с нейронными сетями, но поскольку существует множество различных типов нейронных сетей различной сложности (сверточные, hebbian, kohonen maps и т.д.), я перейду через простой нервный механизм снова, чтобы убедиться, что мы на одной странице.

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

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

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

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

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

Ответ 3

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

Вот нейрон (от 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.

Ответ 4

Этот является инструктором NUPIC программиста. 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()