In [267]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from IPython.html.widgets import interact
from sklearn.datasets import load_digits
digits = load_digits()
In [268]:
#64 inputs, 12 hidden, 10 out
weights = [np.random.rand(64, 12) * 2 - 1, np.random.rand(12, 10) * 2 - 1]
bias = [np.random.rand(64, 12) * 2 - 1, np.random.rand(12, 10) * 2 - 1]
trainingdata = digits.data[0:1200]
traininganswers = digits.target[0:1200]
lc = 0.02
traininganswervectors = np.zeros((1796,10))
for n in range(1796):
traininganswervectors[n][digits.target[n]] = 1
In [269]:
def sigmoid(z):
return 1/(1 + np.exp(-z))
def sig_prime(z):
return sigmoid(z) * (1 - sigmoid(z))
In [270]:
def feedforward(a):
#for each hidden, calculate the value based on the inputs
b = np.zeros(12)
for n in range(12):
b[n] = np.dot(weights[0][0:,n], a) + np.dot(bias[0][0:,n], a)
#for each output, calculate based on hidden
c = np.zeros(10)
for n2 in range(10):
c[n2] = np.dot(weights[1][0:,n2], b) + np.dot(bias[1][0:,n2], b)
return c
def train(weights, bias, data, answers, lc):
for n in range(len(data)):
error = answers[n] - result
print(answers[n])
print(weights[0][n])
weights[1][n] += lc * np.dot(sigmoid(error), weights[1][n])
In [271]:
feedforward(digits.data[0])
Out[271]:
In [272]:
rslt = [0]*20
for n in range(20):
rslt[n] = feedforward(digits.data[n])
train(weights, bias, rslt, traininganswervectors[0:20], lc)
In [ ]: