In [1]:
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt
import scipy
import scipy.spatial

In [2]:
sigmoid = lambda x:1 / ( 1 + np.exp(-x) )

In [3]:
x = np.linspace( -10, 10)
y = np.array( [ sigmoid(v) for v in x ] )

In [4]:
plt.plot( x, y )
plt.savefig('../images/logistic_function.png')



In [10]:
# Hinton's Fish and Chips

wfish = 150
wchips = 50
wketchup = 100
target_weights = [ wfish, wchips, wketchup ]

weights = [ 50, 50, 50 ]
eta = 1/35.0

In [12]:
# One step example

inputs = [ 2, 5, 3 ]
target = sum( [ target_weights[k] * inputs[k] for k in range(3) ] )

output = sum( [ weights[k]*inputs[k] for k in range( 3 ) ] )

print( weights )
#weights = [ weights[k] + eta*inputs[k] * ( target-output ) for k in range ( 3 ) ]
#print( weights )


[70.0, 100.0, 80.0]
[68.28571428571429, 95.71428571428571, 77.42857142857143]

In [9]:
sum( [ weights[k]*inputs[k] for k in range( 3 ) ] )


Out[9]:
880.0

In [11]:
# Multi-step example: runs over the the same input sets N times
weights = [ 50, 50, 50 ]

input_sets = [ [ 2, 5, 3 ], [ 1, 1, 1], [3, 2, 1], [2, 4, 4], [5, 2, 3] ]

for step in range( 20 ):
    print( "step " + str( step ) )
    print( weights )

    for inputs in input_sets:

        target = sum( [ target_weights[k] * inputs[k] for k in range(3) ] )

        output = sum( [ weights[k]*inputs[k] for k in range( 3 ) ] )

        weights = [ weights[k] + eta*inputs[k] * ( target-output ) for k in range ( 3 ) ]
    print( weights )


step 0
[50, 50, 50]
[123.60483132028324, 120.99108704706373, 105.10004164931279]
step 1
[123.60483132028324, 120.99108704706373, 105.10004164931279]
[137.66792018408665, 92.65209732076738, 96.50502435076001]
step 2
[137.66792018408665, 92.65209732076738, 96.50502435076001]
[144.9100428155684, 77.49010989895315, 92.45809179111274]
step 3
[144.9100428155684, 77.49010989895315, 92.45809179111274]
[148.5947744023379, 69.21479026898541, 90.74518372416257]
step 4
[148.5947744023379, 69.21479026898541, 90.74518372416257]
[150.43005992661767, 64.55783855874724, 90.22222621914324]
step 5
[150.43005992661767, 64.55783855874724, 90.22222621914324]
[151.3065176451191, 61.81233156035001, 90.29426213220296]
step 6
[151.3065176451191, 61.81233156035001, 90.29426213220296]
[151.68838063906674, 60.086079461350316, 90.65268853861292]
step 7
[151.68838063906674, 60.086079461350316, 90.65268853861292]
[151.81745647496976, 58.91207254736322, 91.13817469827973]
step 8
[151.81745647496976, 58.91207254736322, 91.13817469827973]
[151.81953561551845, 58.04523424811018, 91.66915193318573]
step 9
[151.81953561551845, 58.04523424811018, 91.66915193318573]
[151.75990523370456, 57.35637506166197, 92.20451327588349]
step 10
[151.75990523370456, 57.35637506166197, 92.20451327588349]
[151.67231027376945, 56.77685894016555, 92.72416057892045]
step 11
[151.67231027376945, 56.77685894016555, 92.72416057892045]
[151.57406145157657, 56.26972802045101, 93.21886252966395]
step 12
[151.57406145157657, 56.26972802045101, 93.21886252966395]
[151.47391590864908, 55.814631733207875, 93.68496988912021]
step 13
[151.47391590864908, 55.814631733207875, 93.68496988912021]
[151.37618729995262, 55.39995839302337, 94.12166440048713]
step 14
[151.37618729995262, 55.39995839302337, 94.12166440048713]
[151.28288878993996, 55.018724877693316, 94.52952914731831]
step 15
[151.28288878993996, 55.018724877693316, 94.52952914731831]
[151.19484986420585, 54.66642735109609, 94.9098079476418]
step 16
[151.19484986420585, 54.66642735109609, 94.9098079476418]
[151.11229784337647, 54.33991544418981, 95.26402386673755]
step 17
[151.11229784337647, 54.33991544418981, 95.26402386673755]
[151.0351602001041, 54.03680071071772, 95.59378474869699]
step 18
[151.0351602001041, 54.03680071071772, 95.59378474869699]
[150.96322128730964, 53.755144117530726, 95.90068600209605]
step 19
[150.96322128730964, 53.755144117530726, 95.90068600209605]
[150.89620317891936, 53.493289384588635, 96.18626382963377]

In [ ]: