можно запрограммировать на любом языке.
это не сложно.
сложнее обучить её.
Вот код для одного нейрона.
В конце ссылка есть на сайт Мичурина. Там и другие интересные
вопросы.
#! /usr/bin/env racket
#lang racket
(provide print-solution)
(require "addx.rkt")
(define loops 33) ; количество шагов обучения нейрона
; Дана таблица 8x23 белых (.) и черных (-) точек.
; Задача для нейрона: Найти цвета других (?) точек.
(define table
(string->list (string-append
"...?.....?............-"
"......?.......?....----"
".?........?.....-----?-"
".......?.....-----?----"
"..?..?....-------------"
".......------?------?--"
"....-----?-------?-----"
".-------------------?--")))
; Значение сигнала нейрона на выходе: y = f(w1 * x1 + w2 * x2 + ...)
; f — функция активации; wk — веса каждого из входов.
; Чем больше вес, там больше вклад входа.
(define w-size 23)
(define h-size 8)
(define len-table (* w-size h-size))
(define black 1)
(define white -1)
(define wx 0) ; сигнал x
(define wy 0) ; сигнал y
(define wb 0) ; опорный сигнал
(define bias 1) ; погрешность
(define error 0)
(define learning_const 0.1) ; скорость, с которой нейрон делает выводы
;(define learning_const (/ 1 10))
;; нейрон
(define (neuron x y) ;; возвращает 1 (черное), или -1 (белое)
(cond
[(< (+ (* wx x) (* wy y) (* wb bias)) 0) white]
[else black]))
(define (learn x y desired) ;; обучающая процедура
(begin
(set! error (- desired (neuron x y)))
(+= wx (* error (* x (* learning_const))))
(+= wy (* error (* y (* learning_const))))
(+= wb (* error (* bias (* learning_const))))))
(define (index->coordinate-x i) (modulo i w-size))
(define (index->coordinate-y i) (floor (/ i w-size)))
(define (eval-point ch ind)
(cond
[(eq? ch #\.) (learn (index->coordinate-x ind) (index->coordinate-y ind) white)]
[(eq? ch #\-) (learn (index->coordinate-x ind) (index->coordinate-y ind) black)]))
;; один шаг обучения нейрона
(define (learning-step t i) ; вызов (learning-step table 0)
(cond
[(< i len-table)
(begin
(eval-point (car t) i)
(learning-step (cdr t) (add1 i)))]))
(define (repeat-learning-steps n)
(cond
[(> n 0)
(begin
(learning-step table 0)
(repeat-learning-steps (sub1 n)))]))
(define (new-line i)
(cond
[(= (index->coordinate-x i) 0) (displayln " ")]))
(define (print-point ch ind)
(cond
[(eq? ch #\.) (display ".")] ; White
[(eq? ch #\-) (display "-")] ; Black
[ else ; #\?
(cond
[(< (neuron (index->coordinate-x ind) (index->coordinate-y ind)) 0)
(display "W")] ; White
[else
(display "B")])])) ; Black
(define (print-solution t i) ; вывод решения
(new-line i)
(cond
[(< i len-table)
(begin
(print-point (car t) i)
(print-solution (cdr t) (add1 i)))]))
;;; Test 1
(display "__ Test 1 __")
(repeat-learning-steps loops)
(print-solution table 0)
(display "шагов обучения = ") (displayln loops)
(display "wx = ") (displayln wx)
(display "wy = ") (displayln wy)
(display "wb = ") (displayln wb)
; 2 шага обучения нейрона 9 ошибок
; 4 шага ................. 8 ошибок
; 8 шагов ................ 8 ошибок
; 16 шагов ................ 6 ошибок
; 32 шага ................. 5 ошибок
; 33 шага - задача решена 0 ошибок
; http://www.michurin.net/computer-science/artificial-intelligence/ ; Заметки о нейронных сетях