Bidirectional Associative Memory (BAM) Implementation from Scratch - GeeksforGeeks

06 Oct, 2021
Prerequisite: ANN | Bidirectional Associative Memory (BAM) Learning AlgorithmTo implement BAM model, here are some essential consideration and approach-  
Consider the value of M, as BAM will be constructed with M pairs of patterns. Here the value of M is 4.Set A: Input PatternsSet B: Corresponding Target PatternsAssign the neurons in input and output layer. Here, neurons in input layer are 6 and output layer are 3Compute the Weight Matrix using the BAM AlgorithmTest the BAM model for the input patterns which will return the corresponding target patterns as output. As well as for each of the target patterns, the BAM model will return the corresponding input patterns.
Consider the value of M, as BAM will be constructed with M pairs of patterns. Here the value of M is 4.
Set A: Input Patterns
Set B: Corresponding Target Patterns
Assign the neurons in input and output layer. Here, neurons in input layer are 6 and output layer are 3
Compute the Weight Matrix using the BAM Algorithm
Test the BAM model for the input patterns which will return the corresponding target patterns as output. As well as for each of the target patterns, the BAM model will return the corresponding input patterns.
Python Implementation of BAM:  
Python3
# Import Python Librariesimport numpy as np # Take two sets of patterns:# Set A: Input Patternx1 = np.array([1, 1, 1, 1, 1, 1]).reshape(6, 1)x2 = np.array([-1, -1, -1, -1, -1, -1]).reshape(6, 1)x3 = np.array([1, 1, -1, -1, 1, 1]).reshape(6, 1)x4 = np.array([-1, -1, 1, 1, -1, -1]).reshape(6, 1) # Set B: Target Patterny1 = np.array([1, 1, 1]).reshape(3, 1)y2 = np.array([-1, -1, -1]).reshape(3, 1)y3 = np.array([1, -1, 1]).reshape(3, 1)y4 = np.array([-1, 1, -1]).reshape(3, 1) '''print("Set A: Input Pattern, Set B: Target Pattern")print("\nThe input for pattern 1 is")print(x1)print("\nThe target for pattern 1 is")print(y1)print("\nThe input for pattern 2 is")print(x2)print("\nThe target for pattern 2 is")print(y2)print("\nThe input for pattern 3 is")print(x3)print("\nThe target for pattern 3 is")print(y3)print("\nThe input for pattern 4 is")print(x4)print("\nThe target for pattern 4 is")print(y4) print("\n------------------------------")'''# Calculate weight Matrix: WinputSet = np.concatenate((x1, x2, x3, x4), axis = 1)targetSet = np.concatenate((y1.T, y2.T, y3.T, y4.T), axis = 0)print("\nWeight matrix:")weight = np.dot(inputSet, targetSet)print(weight) print("\n------------------------------") # Testing Phase# Test for Input Patterns: Set Aprint("\nTesting for input patterns: Set A")def testInputs(x, weight):  # Multiply the input pattern with the weight matrix  # (weight.T X x)  y = np.dot(weight.T, x)  y[y < 0] = -1  y[y >= 0] = 1  return np.array(y) print("\nOutput of input pattern 1")print(testInputs(x1, weight))print("\nOutput of input pattern 2")print(testInputs(x2, weight))print("\nOutput of input pattern 3")print(testInputs(x3, weight))print("\nOutput of input pattern 4")print(testInputs(x4, weight)) # Test for Target Patterns: Set Bprint("\nTesting for target patterns: Set B")def testTargets(y, weight):  # Multiply the target pattern with the weight matrix  # (weight X y)  x = np.dot(weight, y)  x[x <= 0] = -1  x[x > 0] = 1  return np.array(x) print("\nOutput of target pattern 1")print(testTargets(y1, weight))print("\nOutput of target pattern 2")print(testTargets(y2, weight))print("\nOutput of target pattern 3")print(testTargets(y3, weight))print("\nOutput of target pattern 4")print(testTargets(y4, weight))
Weight matrix:
[[4 0 4]
 [4 0 4]
 [0 4 0]
 [0 4 0]
 [4 0 4]
 [4 0 4]]

------------------------------

Testing for input patterns: Set A

Output of input pattern 1
[[1]
 [1]
 [1]]

Output of input pattern 2
[[-1]
 [-1]
 [-1]]

Output of input pattern 3
[[ 1]
 [-1]
 [ 1]]

Output of input pattern 4
[[-1]
 [ 1]
 [-1]]

Testing for target patterns: Set B

Output of target pattern 1
[[1]
 [1]
 [1]
 [1]
 [1]
 [1]]

Output of target pattern 2
[[-1]
 [-1]
 [-1]
 [-1]
 [-1]
 [-1]]

Output of target pattern 3
[[ 1]
 [ 1]
 [-1]
 [-1]
 [ 1]
 [ 1]]

Output of target pattern 4
[[-1]
 [-1]
 [ 1]
 [ 1]
 [-1]
 [-1]]
 
Here, for each of the input patterns, the BAM model gives the correct target patterns and for the target patterns, the model also gives the corresponding input patterns. Hence, it signifies that the BAM model is correctly implemented. 
arorakashish0911
Neural Network
Machine Learning
Python
Machine Learning
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Decision Tree
Search Algorithms in AI
Python | Decision tree implementation
Decision Tree Introduction with example
Elbow Method for optimal value of k in KMeans
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe