-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBAM.py
80 lines (59 loc) · 2.14 KB
/
BAM.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import numpy as np
import copy
#initialize inputs for training
inputs_A=[[1,0,0],[0,1,0],[0,0,1]]
inputs_B=[[0,0,1],[0,1,0],[1,0,0]]
#initialize inputs for testing
inputs_A_test=[[1,1,0],[0,1,1],[0,0,0],[1,0,1],[1,1,1],[1,0,0]]
#create copy of inputs for preparation of weight matrix
inputs_A_bipo = np.array(copy.deepcopy(inputs_A))
inputs_B_bipo = np.array(copy.deepcopy(inputs_B))
#create bipolar version of inputs
for i in range(0,len(inputs_A_bipo)):
for j in range(0,len(inputs_A_bipo)):
if inputs_A_bipo[i,j]== 0:
inputs_A_bipo[i,j] = -1
for i in range(0,len(inputs_B_bipo)):
for j in range(0,len(inputs_B_bipo)):
if inputs_B_bipo[i,j]== 0:
inputs_B_bipo[i,j] = -1
#create weight matrix
W=np.dot(inputs_A_bipo,inputs_B_bipo)
#create weight matrix transpose version
W_trans=np.transpose(W)
###start training###
for iterations in range (1):
#To store final output
output_final=[]
#loop through each input pattern
for i in range (0,len(inputs_A_test)):
#To store output coming out of layer B
output_B=[]
#dot product of inputs pattern and weight matrix, output coming out of layer A
output_A=np.dot(inputs_A_test[i],W)
#apply performance rule
for i in output_A:
if i>0:
j=1
elif i<0:
j=0
else:
j=i
output_B.append(j)
#dot product of output coming out of layer B
#and the transpose version of weight matrix
output_C=np.dot(output_B, W_trans)
#apply performance rule
for i in output_C:
if i>0:
j=1
elif i<0:
j=0
else:
j=i
output_final.append(j)
#split final output into equal chunks
output_FINAL=[output_final[i:i + len(inputs_A)] for i in range(0, len(output_final), len(inputs_A))]
#create a copy of final output for the next iteration
inputs_A_test = copy.deepcopy(output_FINAL)
print(output_FINAL)