# !wget http://www.superdatascience.com/wp-content/uploads/2017/04/Convolutional_Neural_Networks.zip
# !unzip Convolutional_Neural_Networks.zip
import warnings
warnings.filterwarnings("ignore")
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
# initializing
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Convolution2D(192, (3, 3), input_shape=(64, 64, 3), activation='relu'))
# step 2 - Pooling
classifier.add(MaxPooling2D(pool_size=(2,2)))
classifier.add(Dropout(rate= 0.03))
# add another convolution layer
classifier.add(Convolution2D(128, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2,2)))
classifier.add(Dropout(rate= 0.02))
# add another convolution layer
classifier.add(Convolution2D(64, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2,2)))
classifier.add(Dropout(rate= 0.01))
# step 3 - Flattening
classifier.add(Flatten())
# step 4 - full Connection
classifier.add(Dense(128, activation='relu'))
# step 5 - Output layer
classifier.add(Dense(1, activation='sigmoid'))
# compile
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.summary()
# !dir dataset
from keras.preprocessing.image import ImageDataGenerator
1, 1.,7., 9
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory(
'./Convolutional_Neural_Networks/dataset/training_set',
target_size=(64, 64),
batch_size=16,
class_mode='binary')
test_set = test_datagen.flow_from_directory(
'./Convolutional_Neural_Networks/dataset/test_set',
target_size=(64, 64),
batch_size=16,
class_mode='binary')
from time import time, ctime
start = time()
classifier.fit_generator(
training_set,
steps_per_epoch= 8000/16,
epochs=40,
validation_data= test_set,
validation_steps= 2000/16)
eclipse=time()-start
print ('used: {:.2f} s'.format(eclipse))
print (eclipse)
# ctime()
eclipse/60
import numpy as np
from keras.preprocessing import image
t1 = image.load_img('./Convolutional_Neural_Networks/dataset/single_prediction/cat_or_dog_1.jpg',
target_size=(64,64))
type(t1)
t1
t1.size
arr1 = image.img_to_array(t1)
arr1.shape
arr1[:1][0][0:6]
t2 = image.load_img('./Convolutional_Neural_Networks/dataset/single_prediction/cat_or_dog_2.jpg',
target_size=(64,64))
t2
arr2 = image.img_to_array(t2)
arr2.shape
np.expand_dims(arr1, axis=0).shape
np.concatenate([arr1, arr2]).shape
np.concatenate([arr1, arr2], axis=2).shape
np.concatenate([np.expand_dims(arr1, axis=0), np.expand_dims(arr2, axis=0)]).shape
classifier.predict(np.expand_dims(arr2, axis=0)/255.0)
classifier.predict(np.concatenate([np.expand_dims(arr1, axis=0), np.expand_dims(arr2, axis=0)])/255.0)
training_set.class_indices
test_datagen = ImageDataGenerator(rescale=1./255)
test_datagen
pred = test_datagen.flow_from_directory(
'Convolutional_Neural_Networks/dataset/single_prediction/',
target_size=(64, 64))
result = classifier.predict_generator(pred, steps=1)
type(result)
result
pred.filenames