-
Notifications
You must be signed in to change notification settings - Fork 0
/
HLI_model.py
75 lines (60 loc) · 2.15 KB
/
HLI_model.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
import numpy as np
def Norm_vec(vec):
norm = np.linalg.norm(vec)
if norm == 0:
return vec
return vec / norm
def HLI_train(bipolar_train, beta, gamma):
gamma_fc = 0.898
time, vec_size=np.shape(bipolar_train)
Mtf = np.identity(vec_size)*0
Mtf = np.repeat([Mtf],3,axis=0)
Mft = np.identity(vec_size)*(1-gamma_fc)
Mft = np.repeat([Mft],3,axis=0)
t = np.zeros((3,1,vec_size))
for i in range(time):
for l in range(3):
# print("layer:",l)
if l==0:
f = [bipolar_train[i]]
else:
f = t_below
t_in = np.dot(Mft[l],np.transpose(f))
t_in = np.transpose(t_in)
t_in = Norm_vec(t_in)
t_tin=np.inner(t_in,t[l])
ro = (1+beta[l]**2*(t_tin**2-1))**0.5 - beta[l]*(t_tin)
f=np.array(f)
t[l] = ro*t[l] + beta[l]*f
t[l] = Norm_vec(t[l])
Mtf[l] = Mtf[l] + np.dot(np.transpose(f),t[l])
P = np.dot(np.transpose(f),f)/np.linalg.norm(f)**2
B = 1/(gamma**2 + 2*gamma*np.inner(t_in, t[l]) + 1)
A = gamma * B
Mft[l] = Mft[l]*(1-P) + A*Mft[l]*P + B*np.dot(np.transpose(t[l]),f)
t_below = t[l]
return Mtf, Mft
def HLI_test(bipolar_test, Mtf, Mft, beta, gamma):
time, vec_size=np.shape(bipolar_test)
t_in_arr = np.zeros((0,vec_size))
t_arr = np.zeros((3,time,vec_size))
t = np.zeros((3,1,vec_size))
for i in range(time):
# print("time",i)
for l in range(3):
if l==0:
f = [bipolar_test[i]]
else:
f = t_below
t_in = np.dot(Mft[l],np.transpose(f)) #preexperimental
t_in_arr = np.concatenate((t_in_arr,np.transpose(t_in)),0)
t_in = np.transpose(t_in)
t_in = Norm_vec(t_in)
t_tin=np.inner(t_in,t[l])
ro = (1+beta[l]**2*(t_tin**2-1))**0.5 - beta[l]*(t_tin)
f=np.array(f)
t[l] = ro*t[l] + beta[l]*f
t[l] = Norm_vec(t[l])
t_arr[l][i] = t[l]
t_below = t[l]
return t_arr