-
Notifications
You must be signed in to change notification settings - Fork 0
ImageDataGenerator Sample Fragment
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D
from keras import optimizers
import scipy
import pylab as pl
import matplotlib.cm as cm
%matplotlib inline
input_shape = (150, 150, 3)
img_width = 150
img_height = 150
nb_train_samples = 2000
nb_validation_samples = 1000
batch_size = 16
epochs = 25
train_data_dir = ‘D:/development/DeepLearningCV/datasets/catsvsdogs/train’
validation_data_dir = ‘D:/development/DeepLearningCV/datasets/catsvsdogs/validation’
# Creating our data generator for our test data
validation_datagen = ImageDataGenerator(
# used to rescale the pixel values from [0, 255] to [0, 1] interval
rescale = 1./255)
# Creating our data generator for our training data
train_datagen = ImageDataGenerator(
rescale = 1./255, # normalize pixel values to [0,1]
rotation_range = 30, # randomly applies rotations
width_shift_range = 0.3, # randomly applies width shifting
height_shift_range = 0.3, # randomly applies height shifting
horizontal_flip = True, # randonly flips the image
fill_mode = ‘nearest’) # uses the fill mode nearest to fill gaps created by the above
# Specify criteria about our training data, such as the directory, image size, batch size and type
# automagically retrieve images and their classes for train and validation sets
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size = (img_width, img_height),
batch_size = batch_size,
class_mode = ‘binary’,
shuffle = True)
validation_generator = validation_datagen.flow_from_directory(
validation_data_dir,
target_size = (img_width, img_height),
batch_size = batch_size,
class_mode = ‘binary’,
shuffle = False)
# Creating out model
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation(‘relu’))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation(‘sigmoid’))
print(model.summary())
model.compile(loss=‘binary_crossentropy’,
optimizer=‘rmsprop’,
metrics=[‘accuracy’])
history = model.fit_generator(
train_generator,
steps_per_epoch = nb_train_samples // batch_size,
epochs = epochs,
validation_data = validation_generator,
validation_steps = nb_validation_samples // batch_size)