import numpy as np
import math
input_size = 4
output_size = 3
num_hidden = 10
np.random.seed(0)
W1 = np.random.rand(num_hidden, input_size + 1)
W2 = np.random.rand(output_size, num_hidden + 1)
def sigmoid(x):
return 1/(1+ math.exp(-x))
vsigmoid = np.vectorize(sigmoid)
def feed_forward(input_vector):
outputs = []
for layer in [W1,W2]:
input_with_bias = np.append(input_vector, 1)
output = np.inner(layer,input_with_bias)
output = vsigmoid(output)
outputs.append(output)
input_vector = output
return outputs
def backpropagation (input_vector,target):
alpha = 0.1
global W1,W2
o1, o2 = feed_forward(input_vector)
e = (o2 - target)
deltas2 = o2 * (1 - o2) * e
W2 -= alpha * np.outer(deltas2, np.append(o1, 1))
deltas1 = (o1 * (1 - o1)) * np.dot(W2.T, deltas2)[:-1]
W1 -= alpha * np.outer(deltas1, np.append(input_vector, 1))
def predict(input_vector):
return feed_forward(input_vector)[-1]
def predict_one(input_vector):
return np.argmax(feed_forward(input_vector)[-1])
def fit(X_train,y_test,n=1000):
for k in range(n):
for i in range(len(y_test)):
backpropagation(X[i,:],y[i,:])
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = np.zeros((len(y),3))
for i,j in enumerate(iris.target): y[i,j]=1
fit(X,y)