Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import math
- ##########Function##########
- ## (2-6)
- def Vjl(weigth, dataInput, numOfHiden, x0):
- vjHidenNode = [0 for i in range(numOfHiden)]
- for i in range( numOfHiden ):
- for j in range( len(dataInput)):
- vjHidenNode[i] += weigth[j][i] * dataInput[j]
- vjHidenNode[i] -= x0
- return vjHidenNode
- ## (2-7)
- def Yjl(n):
- temp2 = []
- for i in range(len(n)):
- temp = 1/(1+math.exp(-n[i]))
- temp2.append(temp)
- #print temp
- return temp2
- ## (2-10)
- def Ej(Dj, Yj):
- temp = [0 for i in range(len(Dj))]
- for i in range(len(Dj)):
- temp[i] = Dj[i]-Yj[i]
- ##print temp[i]
- return temp
- ## (2-11)
- def Sj_L(Ej,Yj):
- temp2 = []
- for i in range(len(Ej)):
- temp = (Ej[i]*Yj[i])*(1-Yj[i])
- temp2.append(temp)
- return temp2
- ## (2-12)
- def Sj_Neural(Yj, Sk, Wkj):
- temp2 = []
- sumOf_Sk_Wj = 0.0
- for i in range(len(Yj)):
- for j in range(len(Sk)):
- sumOf_Sk_Wj += Sk[j]*Wkj[i][j]
- temp = Yj[i]*( 1.0 - Yj[i])*sumOf_Sk_Wj
- temp2.append(temp)
- sumOf_Sk_Wj = 0.0;
- return temp2
- ## (2-13)
- def Wji(Sj, Yil__1, A, N, Wjn, Wjn_1):
- temp2 = [[0 for i in range(len(Wjn[0]))] for j in range(len(Wjn))]
- for i in range(len(Wjn)):
- for j in range(len(Wjn[0])):
- temp = Wjn[i][j] + A*(Wjn[i][j] - Wjn_1[i][j]) + N*Sj[j]*Yil__1[i]
- temp2[i][j] = temp
- #print temp
- return temp2
- #
- def printArray( name, _array ):
- print name
- for i in range( len(_array) ):
- print _array[i]
- print "----------------------------------------------------"
- def chackIO(_input, _output):
- t = False
- for i in range( len(_input) ):
- if ( (_input[i]*1.0) != _output[i] ):
- t = True
- break
- return t
- ############main############
- numOfInputNode = 8
- numOfHidenNode = 3
- numOfNeuronNode = 8
- dataInput = [0, 0, 1, 0, 1, 0, 1, 0]
- weigthX0 = 0.9
- a = 0.9
- n = 0.9
- t = True;
- last_weigth_hiden_Neuron = [[0 for i in range(numOfNeuronNode)] for j in range(numOfHidenNode)]
- last_weigth_input_hiden = [[0 for i in range(numOfHidenNode)] for j in range(numOfInputNode)]
- ## step 1. random weigth between input layer and hiden layer
- weigth_input_hiden = [[random.random() for i in range(numOfHidenNode)] for j in range(numOfInputNode)]
- printArray("Weigth input and hiden", weigth_input_hiden)
- ## step 2. random weigth between hiden layer and output layer
- weigth_hiden_Neuron = [[random.random() for i in range(numOfNeuronNode)] for j in range(numOfHidenNode)]
- printArray("Weigth hiden and output", weigth_hiden_Neuron)
- while(t):
- ## step 3. Calculate Vj and Yj of Hiden node
- vj_hidenNode = Vjl(weigth_input_hiden, dataInput, numOfHidenNode, weigthX0)
- #print vj_hidenNode
- yj_hidenNode = Yjl(vj_hidenNode)
- #print yj_hidenNode
- ## step 4. Calculate Vj and Yj of Neuron Node
- vj_neuronNode = Vjl(weigth_hiden_Neuron, yj_hidenNode, numOfNeuronNode, weigthX0)
- #print vj_outputNode
- yj_neuronNode = Yjl(vj_neuronNode)
- #print yj_neuronNode
- ## step 5. Calculate Error of Signal from Neuron node
- errorOfNeuron = Ej(dataInput, yj_neuronNode)
- #print errorOfNeuron
- ## step 6. Calculate
- Mj_L = Sj_L(errorOfNeuron, yj_neuronNode)
- #print Mj_L
- ## step 7. Calculate
- Mj_l = Sj_Neural(yj_hidenNode, Mj_L, weigth_hiden_Neuron)
- #print Mj_l
- weigth1 = weigth_hiden_Neuron
- weigth2 = weigth_input_hiden
- weigth_hiden_Neuron = Wji( Mj_L, yj_hidenNode, a, n, weigth_hiden_Neuron, last_weigth_hiden_Neuron )
- weigth_input_hiden = Wji( Mj_l, dataInput, a, n, weigth_input_hiden, last_weigth_input_hiden )
- last_weigth_hiden_Neuron = weigth1
- last_weigth_input_hiden = weigth2
- #printArray("Weigth hiden and output", weigth_hiden_Neuron)
- #printArray("Weigth input and hiden", weigth_input_hiden)
- printArray("Input", dataInput)
- printArray("Output", yj_neuronNode)
- t = chackIO(dataInput, yj_neuronNode)
Advertisement
Add Comment
Please, Sign In to add comment