Skip to content

Commit a576570

Browse files
committed
add in trained models for the binary classifier
1 parent 98104bf commit a576570

File tree

4 files changed

+85
-1
lines changed

4 files changed

+85
-1
lines changed

keras_image_classifier/cnn_bi_classifier_train.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
class_mode='binary'
6565
)
6666

67-
model.fit_generator(train_datagen,
67+
model.fit_generator(train_generator,
6868
steps_per_epoch=nb_train_samples // batch_size,
6969
epochs=epochs,
7070
validation_data=validation_generator,
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
from keras.models import Sequential
2+
from keras.layers import Conv2D, MaxPooling2D, Dense, Activation, Flatten, Dropout
3+
from keras.preprocessing.image import ImageDataGenerator
4+
import keras.backend as K
5+
6+
train_data_dir = 'multi_classifier_data/training'
7+
validation_data_dir = 'multi_classifier_data/validation'
8+
img_width, img_height = 150, 150
9+
batch_size = 16
10+
epochs= 50
11+
nb_classes = 10
12+
nb_train_samples = 2000
13+
nb_validation_samples = 800
14+
15+
train_datagen = ImageDataGenerator(
16+
rescale=1. / 255,
17+
shear_range=0.2,
18+
horizontal_flip=True,
19+
zoom_range=0.2
20+
)
21+
22+
validation_datagen = ImageDataGenerator(
23+
rescale=1. / 255,
24+
)
25+
26+
train_generator = train_datagen.flow_from_directory(
27+
directory=train_data_dir,
28+
class_mode='categorical',
29+
classes=nb_classes,
30+
batch_size=batch_size
31+
)
32+
33+
validation_generator = validation_datagen.flow_from_directory(
34+
directory=validation_data_dir,
35+
class_mode='categorical',
36+
classes=nb_classes,
37+
batch_size=batch_size
38+
)
39+
40+
if K.image_data_format() == 'channels_first':
41+
input_shape = (3, img_width, img_height)
42+
else:
43+
input_shape = (img_width, img_height, 3)
44+
45+
model = Sequential()
46+
model.add(Conv2D(filters=32, input_shape=input_shape, kernel_size=(3, 3)))
47+
model.add(Activation('relu'))
48+
model.add(MaxPooling2D(pool_size=(2, 2)))
49+
50+
model.add(Conv2D(filters=32, kernel_size=(3, 3)))
51+
model.add(Activation('relu'))
52+
model.add(MaxPooling2D(pool_size=(2, 2)))
53+
54+
model.add(Dropout(rate=0.25))
55+
56+
model.add(Conv2D(filters=64, kernel_size=(3, 3)))
57+
model.add(Activation('relu'))
58+
model.add(MaxPooling2D(pool_size=(2, 2)))
59+
60+
model.add(Conv2D(filters=64, kernel_size=(3, 3)))
61+
model.add(Activation('relu'))
62+
model.add(MaxPooling2D(pool_size=(2, 2)))
63+
64+
model.add(Dropout(rate=0.25))
65+
66+
model.add(Flatten())
67+
model.add(Dense(units=64))
68+
model.add(Activation('relu'))
69+
model.add(Dropout(rate=0.5))
70+
model.add(Dense(units=nb_classes))
71+
model.add(Activation('softmax'))
72+
73+
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
74+
model.fit_generator(generator=train_generator,
75+
steps_per_epoch=nb_train_samples // batch_size,
76+
epochs=epochs,
77+
validation_generator=validation_generator,
78+
validation_steps=nb_validation_samples // batch_size)
79+
80+
json = model.to_json()
81+
open('models/cnn_multi_classifier_architecture.json', 'w').write(json)
82+
model.save_weights('models/cnn_multi_classifier_weights.h5', overwrite=True)
83+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"class_name": "Sequential", "config": [{"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": [null, 150, 150, 3], "dtype": "float32", "filters": 32, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Activation", "config": {"name": "activation_1", "trainable": true, "activation": "relu"}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Conv2D", "config": {"name": "conv2d_2", "trainable": true, "filters": 32, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Activation", "config": {"name": "activation_2", "trainable": true, "activation": "relu"}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_2", "trainable": true, "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Conv2D", "config": {"name": "conv2d_3", "trainable": true, "filters": 64, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Activation", "config": {"name": "activation_3", "trainable": true, "activation": "relu"}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_3", "trainable": true, "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Flatten", "config": {"name": "flatten_1", "trainable": true}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "units": 64, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "rate": 0.5}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "units": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Activation", "config": {"name": "activation_4", "trainable": true, "activation": "sigmoid"}}], "keras_version": "2.0.5", "backend": "tensorflow"}
4.65 MB
Binary file not shown.

0 commit comments

Comments
 (0)