Задача у нас будет такая: дан набор точек, про которые известно, что они: или чёрные, или белые. Найти цвета других точек.
Сейчас будет всё понятно. Формулировать будем на питоне:
problem = [
'...?.....?............#',
'......?.......?....####',
'.?........?.....#####?#',
'.......?.....#####?####',
'..?..?....#############',
'.......######?######?##',
'....#####?#######?#####',
'.###################?##']
Там, где стоят точки — это белые точки, там, где #
—
чёрные. А вопросики надо отгадать.
Давайте запрограммирует один единственный нейрон:
wx = 24
wy = 8
wb = -171
def neuron(x, y, bias=1):
f = wx * x + wy * y + wb * bias
if f < 0:
return -1
return 1
Наш нейрон принимает три входных сигнала: две координаты и «опорный сигнал», который всегда постоянен.
На выходе он выдаёт или -1, или +1 — это ответ белое, или чёрное.
Следующий кусочек кода выглядит громоздко, но
он делает простую вещь: пробегает по всем
точкам-символам задачи. Там, где находит
вопросительный знак — вызывает наш нейрон,
передавая ему координаты точки. И выводит
результат: для белых точек !
, для чёрных — %
y = 0
for line in problem:
x = 0
new_line = ''
for char in line:
if char == '?':
# спрашиваем у нейрона, что он думает про эту точку
r = neuron(x, y)
if r < 0:
char = '!'
else:
char = '%'
new_line += char
x += 1
print new_line
y += 1
На выходе мы получим:
...!.....!............#
......!.......!....####
.!........!.....#####%#
.......!.....#####%####
..!..!....#############
.......######%######%##
....#####%#######%#####
.###################%##
Как видите, наш нейрон ведёт себя вполне разумно.
Но откуда мы взяли эти коэффициенты? Как обучить нейрон? Об этом читайте дальше.