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
| from keras import layers from keras import models from keras import optimizers from keras.preprocessing.image import ImageDataGenerator import os, shutil
original_dataset_dir = '/Users/roarboil/Desktop/dogs-vs-cats/org' base_dir = '/Users/roarboil/Desktop/dogs-vs-cats/cats_and_dogs_small' os.mkdir(base_dir)
train_dir = os.path.join(base_dir,'train') os.mkdir(train_dir) validation_dir = os.path.join(base_dir,'validation') os.mkdir(validation_dir) test_dir = os.path.join(base_dir,'test') os.mkdir(test_dir)
train_cats_dir = os.path.join(train_dir,'cats') os.mkdir(train_cats_dir)
train_dogs_dir = os.path.join(train_dir,'dogs') os.mkdir(train_dogs_dir)
validation_cats_dir = os.path.join(validation_dir,'cats') os.mkdir(validation_cats_dir)
validation_dogs_dir = os.path.join(validation_dir,'dogs') os.mkdir(validation_dogs_dir)
test_cats_dir = os.path.join(test_dir,'cats') os.mkdir(test_cats_dir)
test_dogs_dir = os.path.join(test_dir,'dogs') os.mkdir(test_dogs_dir)
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(train_cats_dir,fname) shutil.copyfile(src, dst)
fnames = ['cat.{}.jpg'.format(i) for i in range(1000,1500)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(validation_cats_dir,fname) shutil.copyfile(src, dst)
fnames = ['cat.{}.jpg'.format(i) for i in range(1500,2000)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(test_cats_dir,fname) shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1000)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(train_dogs_dir,fname) shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1000,1500)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(validation_dogs_dir,fname) shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1500,2000)] for fname in fnames: src = os.path.join(original_dataset_dir,fname) dst = os.path.join(test_dogs_dir,fname) shutil.copyfile(src, dst)
model = models.Sequential() model.add(layers.Conv2D(32,(3,3), activation='relu', input_shape=(150,150,3))) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(64, (3,3), activation='relu')) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(128, (3,3), activation='relu')) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(128, (3,3), activation='relu')) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Flatten()) model.add(layers.Dropout(0.5)) model.add(layers.Dense(512, activation='relu')) model.add(layers.Dense(1,activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer=optimizers.RMSprop(lr=1e-4),metrics=['acc'])
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150), batch_size=32, class_mode='binary') validation_generator = train_datagen.flow_from_directory(validation_dir, target_size=(150, 150), batch_size=32, class_mode='binary')
history = model.fit_generator(train_generator, steps_per_epoch=100, epochs=100, validation_data=validation_generator, validation_steps=50) model.save('catsdogs.h5')
|