Week 2 - Lab
Week 2 - Lab
2
[On McCulloch-Pitts Neuron Model]
b += eta*error
''' produce all decision boundaries
a = [0,-b/w[1]]
c = [-b/w[0],0]
plt.figure(1)
plt.plot(a,c)
'''
# final decision boundary
a = [0,-b/w[1]]
c = [-b/w[0],0]
plt.plot(a,c)
# ploting errors
plt.figure(2)
plt.ylim([-1,1])
plt.plot(errors)
Course Module
import glob
import scipy.misc
class neuralNetwork:
def __init__(self, inputNodes, hiddenOneNodes, hiddenTwoNodes, hiddenThreeNodes,
finalNodes, alpha):
self.inputNodes = inputNodes
self.hiddenOneNodes = hiddenOneNodes
self.hiddenTwoNodes = hiddenTwoNodes
self.hiddenThreeNodes = hiddenThreeNodes
self.finalNodes = finalNodes
self.alpha = alpha
self.weightsInputHidden = numpy.random.normal(0.0, pow(self.hiddenOneNodes, -
0.5),(self.hiddenOneNodes,self.inputNodes))
self.weightsHiddenOneHiddenTwo = numpy.random.normal(0.0,
pow(self.hiddenTwoNodes,-0.5),(self.hiddenTwoNodes,self.hiddenOneNodes))
self.weightsHiddenTwoHiddenThree = numpy.random.normal(0.0,
pow(self.hiddenThreeNodes,-0.5),(self.hiddenThreeNodes,self.hiddenTwoNodes))
self.weightsHiddenOutput = numpy.random.normal(0.0, pow(self.hiddenOneNodes,-
0.5),(self.finalNodes, self.hiddenThreeNodes))
pass
def train(self, inputs, target):
inputs = numpy.array(inputs, ndmin=2).T
target = numpy.array(target, ndmin=2).T
hiddenInput = numpy.dot(self.weightsInputHidden,inputs)
hiddenOneOutput = self.sigmoid(hiddenInput)
hiddenTwoInput = numpy.dot(self.weightsHiddenOneHiddenTwo,hiddenOneOutput)
hiddenTwoOutput = self.sigmoid(hiddenTwoInput)
hiddenThreeInput =
numpy.dot(self.weightsHiddenTwoHiddenThree,hiddenTwoOutput)
hiddenThreeOutput = self.sigmoid(hiddenThreeInput)
finalInput = numpy.dot(self.weightsHiddenOutput,hiddenThreeOutput)
finalOutput = self.sigmoid(finalInput)
outputError = target - finalOutput
hiddenOutputError = numpy.dot(self.weightsHiddenOutput.T, outputError)
hiddenThreeHiddenTwoError = numpy.dot(self.weightsHiddenTwoHiddenThree.T,
hiddenOutputError)
hiddenTwoHiddenOneError = numpy.dot(self.weightsHiddenOneHiddenTwo.T,
hiddenThreeHiddenTwoError)
[Introduction to Fuzzy/Neural Systems]
2
[On McCulloch-Pitts Neuron Model]
hiddenInputError = numpy.dot(self.weightsInputHidden.T,
hiddenTwoHiddenOneError)
self.weightsHiddenOutput += self.alpha * numpy.dot((outputError * finalOutput * (1.0 -
finalOutput)),numpy.transpose(hiddenThreeOutput))
self.weightsHiddenTwoHiddenThree += self.alpha * numpy.dot((hiddenOutputError *
hiddenThreeOutput * (1.0 -
hiddenThreeOutput)),numpy.transpose(hiddenTwoOutput))
self.weightsHiddenOneHiddenTwo += self.alpha *
numpy.dot((hiddenThreeHiddenTwoError * hiddenTwoOutput * (1.0 -
hiddenTwoOutput)),numpy.transpose(hiddenOneOutput))
self.weightsInputHidden += self.alpha * numpy.dot((hiddenTwoHiddenOneError *
hiddenOneOutput * (1.0 - hiddenOneOutput)),numpy.transpose(inputs))
pass
def query(self, inputs):
inputs = numpy.array(inputs, ndmin=2).T
hiddenInput = numpy.dot(self.weightsInputHidden,inputs)
hiddenOneOutput = self.sigmoid(hiddenInput)
hiddenTwoInput = numpy.dot(self.weightsHiddenOneHiddenTwo,hiddenOneOutput)
hiddenTwoOutput = self.sigmoid(hiddenTwoInput)
hiddenThreeInput =
numpy.dot(self.weightsHiddenTwoHiddenThree,hiddenTwoOutput)
hiddenThreeOutput = self.sigmoid(hiddenThreeInput)
finalInput = numpy.dot(self.weightsHiddenOutput,hiddenThreeOutput)
finalOutput = self.sigmoid(finalInput)
return finalOutput
pass
def sigmoid(self, x):
return scipy.special.expit(x)
pass
# In[12]:
#AND
n = neuralNetwork(2,12,36,12,1,0.1)
print('Before training')
print(n.query([0,0]))
print(n.query([0,1]))
Course Module
print(n.query([1,0]))
print(n.query([1,1]))
print("Training...")
for i in range(0, 10000):
n.train([0,0],[0])
n.train([0,1],[0])
n.train([1,0],[0])
n.train([1,1],[1])
print("Done")
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
# In[13]:
#OR
n = neuralNetwork(2,12,36,12,1,0.1)
print('Before training')
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
print("Training...")
for i in range(0, 10000):
n.train([0,0],[0])
n.train([0,1],[1])
n.train([1,0],[1])
n.train([1,1],[1])
print("Done")
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
# In[14]:
#NOT
n = neuralNetwork(1,12,36,12,1,0.1)
[Introduction to Fuzzy/Neural Systems]
2
[On McCulloch-Pitts Neuron Model]
print('Before training')
print(n.query([0]))
print(n.query([1]))
print("Training...")
for i in range(0, 10000):
n.train([0],[1])
n.train([1],[0])
print("Done")
print(n.query([0]))
print(n.query([1]))
# In[15]:
#NAND
n = neuralNetwork(2,12,36,12,1,0.1)
print('Before training')
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
print("Training...")
for i in range(0, 10000):
n.train([0,0],[1])
n.train([0,1],[1])
n.train([1,0],[1])
n.train([1,1],[0])
print("Done")
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
# In[16]:
#XOR
n = neuralNetwork(2,12,36,12,1,0.1)
Course Module
print('Before training')
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
print("Training...")
for i in range(0, 10000):
n.train([0,0],[0])
n.train([0,1],[1])
n.train([1,0],[1])
n.train([1,1],[0])
print("Done")
print(n.query([0,0]))
print(n.query([0,1]))
print(n.query([1,0]))
print(n.query([1,1]))
<Exercise 1.
Lab Activity: Simulation
Design and develop the neural network system for the following experiment
Experiment 1: McCulloch and Pitts Network
1. Design and train a neural network system which can perform AND and OR
operation.
2. Tune the neural network model and minimize the error by updating the
weights and perform the testing.
3. Run the simulation in group and explain the working principles of the
algorithm.
4. Interpret the output of the designed neural network system by varying the
inputs.
1. Chaitanya Singh; How to Install Python. (n.d.). Retrieved 14 May 2020, from
https://beginnersbook.com/2018/01/python-installation/; 14-05-2020
Course Module