-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPredictOnStyle.py
More file actions
67 lines (54 loc) · 2.78 KB
/
Copy pathPredictOnStyle.py
File metadata and controls
67 lines (54 loc) · 2.78 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
57
58
59
60
61
62
63
64
65
66
67
import pandas as pd
import numpy as np
import sklearn.metrics as metrics
from sklearn import cross_validation
import matplotlib.pyplot as plt
from os.path import join
from keras.layers import Input, Dense, Dropout
from keras.models import Model
from keras.models import Sequential
import DataModel
import TestVggKeras
def processImage(x):
print("Processing file: {0}".format(x))
return TestVggKeras.extractImageStyle(join(DataModel.trainDataFolder, x))
numSamples = 1000
print("Preparing datasets...")
subFrameTrue = DataModel.trainFrame[DataModel.trainFrame['Same'] == True].sample(numSamples)
subFrameTrue['FirstStyle'] = subFrameTrue['FirstName'].map(processImage)
subFrameTrue['SecondStyle'] = subFrameTrue['SecondName'].map(processImage)
subFrameTrue['Distance'] = [
TestVggKeras.diffImagesStyles(subFrameTrue['FirstStyle'].values[i], subFrameTrue['SecondStyle'].values[i])
for i in range(len(subFrameTrue))]
subFrameFalse = DataModel.trainFrame[DataModel.trainFrame['Same'] == False].sample(numSamples)
subFrameFalse['FirstStyle'] = subFrameFalse['FirstName'].map(processImage)
subFrameFalse['SecondStyle'] = subFrameFalse['SecondName'].map(processImage)
subFrameFalse['Distance'] = [
TestVggKeras.diffImagesStyles(subFrameFalse['FirstStyle'].values[i], subFrameFalse['SecondStyle'].values[i])
for i in range(len(subFrameFalse))]
combined = np.hstack((
np.vstack((np.vstack(subFrameTrue['FirstStyle'].values), np.vstack(subFrameFalse['FirstStyle'].values))),
np.vstack((np.vstack(subFrameTrue['SecondStyle'].values), np.vstack(subFrameFalse['SecondStyle'].values))),
np.vstack((subFrameTrue['Distance'].values.reshape(numSamples, 1),
subFrameFalse['Distance'].values.reshape(numSamples, 1)))))
(x_train, x_cv, y_train, y_cv) = cross_validation.train_test_split(combined,
np.hstack((subFrameTrue['Same'].values,
subFrameFalse['Same'].values)),
test_size=0.3)
print("Initializing model...")
model = Sequential()
model.add(Dense(512, input_shape=(combined.shape[1],), activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
print("Fitting model...")
model.fit(x_train, y_train)
pp = model.predict(x_cv)
pp_bool = np.isclose(True, pp)
print(metrics.accuracy_score(y_cv, pp_bool))
print(metrics.confusion_matrix(y_cv, pp_bool))
print("Classification report\n{0}".format(metrics.classification_report(y_cv, pp_bool)))