Нейронные сети, как они выглядят в кодировании?
В принципе, я знаю концепцию нейронной сети и того, что она есть, но я не могу понять, как она выглядит, когда вы ее кодируете или как вы храните данные, я просмотрел множество руководств, которые я нашел в 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()