-
Notifications
You must be signed in to change notification settings - Fork 2
/
utils.py
83 lines (77 loc) · 2.73 KB
/
utils.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
81
82
83
import numpy as np
from cvxopt import matrix, solvers
def getImage(listofDict):
images = []
for data in listofDict:
images.append(data['image'])
return images
def getLabel(listofDict):
labels = []
for data in listofDict:
labels.append(data['label'])
return np.squeeze(labels)
def digit_data(data_path):
inputdata = sio.loadmat(data_path)
train = inputdata['digitdata']
test = inputdata['testdata']
training_data = []
for i in range(len(train)):
dataset = []
for j in range(25):
for k in range(len(train[0])):
data = {}
data['image'] = train[i,k,j,:,:]/255.0
temp = np.zeros([1, 10])
temp[0][k] = 1
data['label'] = temp
dataset.append(data)
training_data.append(dataset)
## Split the test dataset
testing_data = []
for k in range(0,5,2):
dataset = []
for i in range(100*(k+1), (k+3)*100):
for j in range(len(test)):
data = {}
data['image'] = test[j,i,:,:]/255.0
temp = np.zeros([1, 10])
temp[0][j] = 1
data['label'] = temp
dataset.append(data)
testing_data.append(dataset)
for k in range(2):
dataset = []
for i in range(0, 100):
for j in range(len(test)):
data = {}
data['image'] = test[j,i,:,:]/255.0
temp = np.zeros([1, 10])
temp[0][j] = 1
data['label'] = temp
dataset.append(data)
# Additional test data
for i in range(400, 500):
for j in range(len(test)):
data = {}
data['image'] = train[4,j,i,:,:]/255.0
temp = np.zeros([1, 10])
temp[0][j] = 1
data['label'] = temp
dataset.append(data)
testing_data.append(dataset)
print (len(training_data[0]))
print (len(testing_data))
print (len(testing_data[4]))
return training_data, testing_data
def optimizePSD(distMat, numdata):
G0 = matrix(np.concatenate([-np.eye(numdata*numdata), np.eye(numdata*numdata)]))
h0 = matrix(np.concatenate([np.zeros([numdata*numdata, 1]), np.ones([numdata*numdata, 1])]))
wopt = []
for nvar in range(len(distMat)):
c = np.reshape(distMat[nvar], [numdata*numdata, 1])
stat = np.sort(np.reshape(c, [numdata*numdata]))
c = matrix(c) - np.median(c)
sol = solvers.sdp(c, Gl=G0, hl=h0)
#print (np.round((np.reshape(sol['x'], [numdata, numdata])), 3))
wopt.append(np.round(np.reshape(sol['x'], [numdata, numdata]), 3))
return wopt