Advertisement
bsddeamon

ANN.ss

Jun 18th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.29 KB | None | 0 0
  1. (import (scheme inexact) (srfi 1) (srfi 27)) (define (transpose x) (apply map list x))
  2. (random-source-randomize! default-random-source)
  3. (define (rand/2) (- (* ((random-source-make-reals default-random-source)) 2) 1))
  4. (define (init-layer x y) (list-tabulate y (lambda (y) (list-tabulate x (lambda (x) (rand/2))))))
  5. (define (matrix-map f . xy) (apply map (lambda xy (apply map f xy)) xy))
  6. (define (sigmoid x) (/ 1 (+ 1 (exp (- 0 x))))) (define (derivative x) (* x (- 1 x)))
  7. (define (connect x y)
  8.   (map (lambda (x) (map (lambda (y) (apply + (map * x y))) (transpose y))) x))
  9. (let ([X '((0 0 1) (0 1 1) (1 0 1) (1 1 1))] [y (transpose '((0 1 1 0)))]
  10.       [syn0 (init-layer 3 4)] [syn1 (init-layer 4 1)])
  11.   (let backpropagate ([j 0])
  12.     (if (> j 60000) (list syn0 syn1)
  13.         (let* ([l1 (matrix-map sigmoid (connect X syn0))] [l2 (matrix-map sigmoid (connect l1 syn1))]
  14.                [l2-delta (matrix-map (lambda (y l2) (* (- y l2) (derivative l2))) y l2)]
  15.                [l1-delta (matrix-map (lambda (delta l1) (* delta (derivative l1)))
  16.                            (connect (transpose syn1) l2-delta) l1)]
  17.                [syn1 (matrix-map + (connect l2-delta (transpose l1)) syn1)]
  18.                [syn0 (matrix-map + (connect l1-delta (transpose X)) syn0)])
  19.           (backpropagate (+ j 1))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement