Repository navigation
Expand file tree
/
Copy pathtestFramework.py
More file actions
56 lines (40 loc) · 1.58 KB
/
Copy pathtestFramework.py
File metadata and controls
56 lines (40 loc) · 1.58 KB
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
from hopfield import Hopfield, ContinuousHopfield, DAMDiscreteHopfield
import numpy as np
import random
#Randomly inverts data
def randomFlipping(input, flipCount):
flippy = np.copy(input)
inv = np.random.binomial(n=1, p=flipCount, size=len(input))
for i, v in enumerate(input):
if inv[i]:
flippy[i] = -1 * v
return flippy
#Removes random chunk of data
def highBlocking(input, blockLevel):
blocked = np.copy(input)
for i in range(0, int(len(input)*blockLevel)):
blocked[i] = -1
return blocked
print("============================================")
print("Hopfield")
print("============================================")
for i in range(40, 800, 40):
patterns = np.array([random.choices([-1,1], k=1000) for l in range(i)])
hoppy = Hopfield(patterns)
corrupted = [highBlocking(d, 0.4) for d in patterns]
predictions = []
for l in range(len(corrupted)):
predictions.append(hoppy.predict(corrupted[l], 3)[-1])
print(i, ":", (patterns==predictions).sum()/(1000*i))
print("============================================")
print("Dense Associative Memory")
print("============================================")
#for i in range(40, 800, 40):
for i in range(2, 40, 4):
patterns = np.array([random.choices([-1,1], k=128) for l in range(i)])
hoppy = DAMDiscreteHopfield(patterns)
corrupted = [highBlocking(d, 0.4) for d in patterns]
predictions = []
for l in range(len(corrupted)):
predictions.append(hoppy.predict(corrupted[l], 3)[-1])
print(i, ":", (patterns==predictions).sum()/(1000*i))