-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclassifier3.py
101 lines (68 loc) · 2.44 KB
/
classifier3.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from keras.callbacks import CSVLogger
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from keras import optimizers
# dimensions of our images.
img_width, img_height = 150, 150
top_model_weights_path = 'bottleneck_fc_model2.h5'
train_data_dir = '/data/train'
validation_data_dir = '/data/test'
nb_train_samples = 200
nb_validation_samples = 200
epochs = 5
batch_size = 1
def save_bottlebeck_features():
datagen = ImageDataGenerator(rescale=1. / 255)
# build the VGG16 network
model = applications.VGG16(include_top=False, weights='imagenet')
generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None,
shuffle=False)
bottleneck_features_train = model.predict_generator(
generator, nb_train_samples // batch_size)
np.save(open('bottleneck_features_train_demo.npy', 'w'),
bottleneck_features_train)
print("Starting Create validation data>>>")
generator = datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None,
shuffle=False)
bottleneck_features_validation = model.predict_generator(
generator, nb_validation_samples // batch_size)
np.save(open('bottleneck_features_validation_demo.npy', 'w'),
bottleneck_features_validation)
print("<<< Created Validation DATA >>>")
def train_top_model():
train_data = np.load(open('demo/bottleneck_features_train_demo.npy', 'rb'))
train_labels = np.array(
[0] * (100) + [1] * (100))
validation_data = np.load(open('demo/bottleneck_features_validation_demo.npy', 'rb'))
validation_labels = np.array(
[0] * (100) + [1] * (100))
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(train_data, train_labels,
epochs=epochs,
#callbacks=[csv_logger],
batch_size=batch_size,
validation_data=(validation_data, validation_labels))
model.save_weights(top_model_weights_path)
print(history.history.keys())
#save_bottlebeck_features()
train_top_model()