Интересно, есть ли у кого-нибудь пример кода нейронной сети на питоне. Если кто-то знает какой-то учебник с полным пошаговым руководством, это было бы здорово, но просто пример исходного кода тоже был бы отличным!
Спасибо
Интересно, есть ли у кого-нибудь пример кода нейронной сети на питоне. Если кто-то знает какой-то учебник с полным пошаговым руководством, это было бы здорово, но просто пример исходного кода тоже был бы отличным!
Спасибо
Посмотрите на обучения клик из книги Программирование коллективного разума.
Вот простой пример от Армина Риго: http://codespeak.net/pypy/dist/demo/bpnn.py. Если вы хотите использовать более сложные вещи, есть также http://pybrain.org.
Изменить: ссылка не работает. В любом случае, текущий способ использования нейронных сетей в Python, вероятно, — это Theano.
Нашел это интересное обсуждение на форумах Ubuntu http://ubuntuforums.org/showthread.php?t=320257< /а>
import time
import random
# Learning rate:
# Lower = slower
# Higher = less precise
rate=.2
# Create random weights
inWeight=[random.uniform(0, 1), random.uniform(0, 1)]
# Start neuron with no stimuli
inNeuron=[0.0, 0.0]
# Learning table (or gate)
test =[[0.0, 0.0, 0.0]]
test+=[[0.0, 1.0, 1.0]]
test+=[[1.0, 0.0, 1.0]]
test+=[[1.0, 1.0, 1.0]]
# Calculate response from neural input
def outNeuron(midThresh):
global inNeuron, inWeight
s=inNeuron[0]*inWeight[0] + inNeuron[1]*inWeight[1]
if s>midThresh:
return 1.0
else:
return 0.0
# Display results of test
def display(out, real):
if out == real:
print str(out)+" should be "+str(real)+" ***"
else:
print str(out)+" should be "+str(real)
while 1:
# Loop through each lesson in the learning table
for i in range(len(test)):
# Stimulate neurons with test input
inNeuron[0]=test[i][0]
inNeuron[1]=test[i][1]
# Adjust weight of neuron #1
# based on feedback, then display
out = outNeuron(2)
inWeight[0]+=rate*(test[i][2]-out)
display(out, test[i][2])
# Adjust weight of neuron #2
# based on feedback, then display
out = outNeuron(2)
inWeight[1]+=rate*(test[i][2]-out)
display(out, test[i][2])
# Delay
time.sleep(1)
РЕДАКТИРОВАТЬ: существует также фреймворк с именем chainer https://pypi.python.org/pypi/chainer/1.0.0
Вы можете взглянуть на Monte:
Monte (python) — это среда Python для создания обучающих машин на основе градиента, таких как нейронные сети, условные случайные поля, логистическая регрессия и т. д. Monte содержит модули (которые содержат параметры, функцию стоимости и функцию градиента) и обучающие программы (которые может адаптировать параметры модуля, сводя к минимуму его функцию стоимости на обучающих данных).
Модули обычно состоят из других модулей, которые, в свою очередь, могут содержать другие модули и т. д. Градиенты подобных разложимых систем можно вычислить с помощью обратного распространения.
Вот учебное пособие по вероятностной нейронной сети:http://www.youtube.com/watch?v=uAKu4g7lBxU
И моя реализация Python:
import math
data = {'o' : [(0.2, 0.5), (0.5, 0.7)],
'x' : [(0.8, 0.8), (0.4, 0.5)],
'i' : [(0.8, 0.5), (0.6, 0.3), (0.3, 0.2)]}
class Prob_Neural_Network(object):
def __init__(self, data):
self.data = data
def predict(self, new_point, sigma):
res_dict = {}
np = new_point
for k, v in self.data.iteritems():
res_dict[k] = sum(self.gaussian_func(np[0], np[1], p[0], p[1], sigma) for p in v)
return max(res_dict.iteritems(), key=lambda k : k[1])
def gaussian_func(self, x, y, x_0, y_0, sigma):
return math.e ** (-1 *((x - x_0) ** 2 + (y - y_0) ** 2) / ((2 * (sigma ** 2))))
prob_nn = Prob_Neural_Network(data)
res = prob_nn.predict((0.2, 0.6), 0.1)
Результат:
>>> res
('o', 0.6132686067117191)
.iteritems()
на .items()
; это должно исправить это.
- person Akavall; 26.04.2015