In [6]:
%matplotlib inline

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

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

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

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



In [1]:
# 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 [2]:
# 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 )


[50, 50, 50]
[70.0, 100.0, 80.0]

In [10]:
# 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]
[378.19999999999999, 385.31428571428569, 351.08571428571429]
step 1
[378.19999999999999, 385.31428571428569, 351.08571428571429]
[706.39999999999998, 720.62857142857138, 652.17142857142858]
step 2
[706.39999999999998, 720.62857142857138, 652.17142857142858]
[1034.5999999999999, 1055.9428571428571, 953.25714285714275]
step 3
[1034.5999999999999, 1055.9428571428571, 953.25714285714275]
[1362.8, 1391.2571428571428, 1254.3428571428569]
step 4
[1362.8, 1391.2571428571428, 1254.3428571428569]
[1691.0, 1726.5714285714284, 1555.4285714285713]
step 5
[1691.0, 1726.5714285714284, 1555.4285714285713]
[2019.2, 2061.8857142857141, 1856.5142857142857]
step 6
[2019.2, 2061.8857142857141, 1856.5142857142857]
[2347.4000000000001, 2397.1999999999998, 2157.6000000000004]
step 7
[2347.4000000000001, 2397.1999999999998, 2157.6000000000004]
[2675.5999999999999, 2732.5142857142855, 2458.6857142857148]
step 8
[2675.5999999999999, 2732.5142857142855, 2458.6857142857148]
[3003.7999999999997, 3067.8285714285712, 2759.7714285714292]
step 9
[3003.7999999999997, 3067.8285714285712, 2759.7714285714292]
[3331.9999999999995, 3403.1428571428569, 3060.8571428571436]
step 10
[3331.9999999999995, 3403.1428571428569, 3060.8571428571436]
[3660.1999999999994, 3738.4571428571426, 3361.942857142858]
step 11
[3660.1999999999994, 3738.4571428571426, 3361.942857142858]
[3988.3999999999992, 4073.7714285714283, 3663.0285714285724]
step 12
[3988.3999999999992, 4073.7714285714283, 3663.0285714285724]
[4316.5999999999985, 4409.0857142857149, 3964.1142857142868]
step 13
[4316.5999999999985, 4409.0857142857149, 3964.1142857142868]
[4644.7999999999984, 4744.4000000000015, 4265.2000000000007]
step 14
[4644.7999999999984, 4744.4000000000015, 4265.2000000000007]
[4972.9999999999982, 5079.7142857142881, 4566.2857142857156]
step 15
[4972.9999999999982, 5079.7142857142881, 4566.2857142857156]
[5301.199999999998, 5415.0285714285747, 4867.3714285714304]
step 16
[5301.199999999998, 5415.0285714285747, 4867.3714285714304]
[5629.3999999999978, 5750.3428571428612, 5168.4571428571453]
step 17
[5629.3999999999978, 5750.3428571428612, 5168.4571428571453]
[5957.5999999999976, 6085.6571428571478, 5469.5428571428602]
step 18
[5957.5999999999976, 6085.6571428571478, 5469.5428571428602]
[6285.7999999999975, 6420.9714285714344, 5770.628571428575]
step 19
[6285.7999999999975, 6420.9714285714344, 5770.628571428575]
[6613.9999999999973, 6756.285714285721, 6071.7142857142899]

In [ ]: