{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname,filename))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:12:31.049835Z","iopub.execute_input":"2022-10-30T16:12:31.050715Z","iopub.status.idle":"2022-10-30T16:12:31.077057Z","shell.execute_reply.started":"2022-10-30T16:12:31.050615Z","shell.execute_reply":"2022-10-30T16:12:31.076001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.path.abspath('')","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:12:46.543283Z","iopub.execute_input":"2022-10-30T16:12:46.543987Z","iopub.status.idle":"2022-10-30T16:12:46.552333Z","shell.execute_reply.started":"2022-10-30T16:12:46.543948Z","shell.execute_reply":"2022-10-30T16:12:46.551342Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_dir = \"/kaggle/working/base_dir\"\nos.mkdir(base_dir)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:12:49.968116Z","iopub.execute_input":"2022-10-30T16:12:49.968727Z","iopub.status.idle":"2022-10-30T16:12:49.974453Z","shell.execute_reply.started":"2022-10-30T16:12:49.968690Z","shell.execute_reply":"2022-10-30T16:12:49.973376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! unzip /kaggle/input/dogs-vs-cats/test1.zip -d \"/kaggle/working/base_dir\"","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:12:52.631094Z","iopub.execute_input":"2022-10-30T16:12:52.631486Z","iopub.status.idle":"2022-10-30T16:12:58.720724Z","shell.execute_reply.started":"2022-10-30T16:12:52.631453Z","shell.execute_reply":"2022-10-30T16:12:58.719650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! unzip /kaggle/input/dogs-vs-cats/train.zip -d \"/kaggle/working/base_dir\"","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:14:58.318882Z","iopub.execute_input":"2022-10-30T16:14:58.319603Z","iopub.status.idle":"2022-10-30T16:15:10.125039Z","shell.execute_reply.started":"2022-10-30T16:14:58.319555Z","shell.execute_reply":"2022-10-30T16:15:10.123951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"validation_dir = os.path.join(base_dir, 'validation')\n\ntrain_dir = os.path.join(base_dir,'train')\ntest_dir = os.path.join(base_dir,'test1')\n\ntrain_cats_dir = os.path.join(train_dir,'cats')\ntrain_dogs_dir = os.path.join(train_dir,'dogs')\n\ntest_dogs_dir = os.path.join(test_dir,'dogs')\ntest_cats_dir = os.path.join(test_dir,'cats')\n\nvalidation_cats_dir = os.path.join(validation_dir,'cats')\nvalidation_dogs_dir = os.path.join(validation_dir,'dogs')\n\nos.mkdir(train_cats_dir)\nos.mkdir(train_dogs_dir)\nos.mkdir(test_dogs_dir)\nos.mkdir(test_cats_dir)\nos.mkdir(validation_dir)\nos.mkdir(validation_cats_dir)\nos.mkdir(validation_dogs_dir)\n","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:21:41.490746Z","iopub.execute_input":"2022-10-30T16:21:41.491855Z","iopub.status.idle":"2022-10-30T16:21:41.501615Z","shell.execute_reply.started":"2022-10-30T16:21:41.491799Z","shell.execute_reply":"2022-10-30T16:21:41.500603Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Copies the first 9,000 cat images to train_cats_dir**","metadata":{}},{"cell_type":"code","source":"import shutil\n\nfnames = ['cat.{}.jpg'.format(i) for i in range(9000)]\nfor fname in fnames:\n    src = os.path.join(train_dir, fname)\n    dst = os.path.join(train_cats_dir, fname)\n    shutil.copyfile(src, dst)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:51:34.827903Z","iopub.execute_input":"2022-10-30T16:51:34.828296Z","iopub.status.idle":"2022-10-30T16:51:35.700970Z","shell.execute_reply.started":"2022-10-30T16:51:34.828260Z","shell.execute_reply":"2022-10-30T16:51:35.699988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Moves the first 9,000 dogs images to train_dogs_dir**","metadata":{}},{"cell_type":"code","source":"fnames = ['dog.{}.jpg'.format(i) for i in range(9000)]\nfor fname in fnames:\n    src = os.path.join(train_dir, fname)\n    dst = os.path.join(train_dogs_dir, fname)\n    shutil.move(src, dst)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:51:39.447670Z","iopub.execute_input":"2022-10-30T16:51:39.448050Z","iopub.status.idle":"2022-10-30T16:51:39.731941Z","shell.execute_reply.started":"2022-10-30T16:51:39.448021Z","shell.execute_reply":"2022-10-30T16:51:39.730995Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Moves last 3500 dogs images to validation_dogs_dir**","metadata":{}},{"cell_type":"code","source":"fnames = ['dog.{}.jpg'.format(i) for i in range(9000,12500)]\nfor fname in fnames:\n    src = os.path.join(train_dir, fname)\n    dst = os.path.join(validation_dogs_dir, fname)\n    shutil.move(src, dst)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:51:42.727242Z","iopub.execute_input":"2022-10-30T16:51:42.727608Z","iopub.status.idle":"2022-10-30T16:51:42.840496Z","shell.execute_reply.started":"2022-10-30T16:51:42.727576Z","shell.execute_reply":"2022-10-30T16:51:42.839559Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Moves last 3500 cats images to validation_dogs_dir","metadata":{}},{"cell_type":"code","source":"fnames = ['cat.{}.jpg'.format(i) for i in range(9000,12500)]\nfor fname in fnames:\n    src = os.path.join(train_dir, fname)\n    dst = os.path.join(validation_cats_dir, fname)\n    shutil.move(src, dst)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:51:44.759001Z","iopub.execute_input":"2022-10-30T16:51:44.759649Z","iopub.status.idle":"2022-10-30T16:51:44.875658Z","shell.execute_reply.started":"2022-10-30T16:51:44.759613Z","shell.execute_reply":"2022-10-30T16:51:44.874743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! dir /kaggle/working/base_dir/train/","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:51:49.381866Z","iopub.execute_input":"2022-10-30T16:51:49.382397Z","iopub.status.idle":"2022-10-30T16:51:50.611454Z","shell.execute_reply.started":"2022-10-30T16:51:49.382360Z","shell.execute_reply":"2022-10-30T16:51:50.610338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras import layers\nfrom keras import models\n\nmodel = models.Sequential()\nmodel.add(layers.Conv2D(64,(3,3),activation='relu', input_shape=(150,150,3)))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Conv2D(128,(3,3),activation='relu', padding='valid'))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Conv2D(256,(3,3),activation='relu', padding='valid'))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Conv2D(256,(3,3),activation='relu'))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(512, activation='relu'))\nmodel.add(layers.Dense(1,activation='sigmoid'))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:52:03.535427Z","iopub.execute_input":"2022-10-30T16:52:03.535813Z","iopub.status.idle":"2022-10-30T16:52:10.896453Z","shell.execute_reply.started":"2022-10-30T16:52:03.535777Z","shell.execute_reply":"2022-10-30T16:52:10.895443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:52:10.898588Z","iopub.execute_input":"2022-10-30T16:52:10.898944Z","iopub.status.idle":"2022-10-30T16:52:10.905515Z","shell.execute_reply.started":"2022-10-30T16:52:10.898909Z","shell.execute_reply":"2022-10-30T16:52:10.904589Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Configuring the model for training","metadata":{}},{"cell_type":"code","source":"from keras import optimizers\nimport tensorflow as tf\nmodel.compile(loss='binary_crossentropy',optimizer=tf.keras.optimizers.RMSprop(learning_rate=1e-4),metrics=['acc'])","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:52:17.977532Z","iopub.execute_input":"2022-10-30T16:52:17.977904Z","iopub.status.idle":"2022-10-30T16:52:18.251349Z","shell.execute_reply.started":"2022-10-30T16:52:17.977869Z","shell.execute_reply":"2022-10-30T16:52:18.250360Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Using ImageDataGenerator to read images from directories","metadata":{}},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\ntrain_datagen = ImageDataGenerator(rescale=1./255)\ntest_datagen = ImageDataGenerator(rescale=1./255)\n\ntrain_generator = train_datagen.flow_from_directory(train_dir,target_size=(150,150),batch_size=100,class_mode='binary')\nvalidation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(150,150),batch_size=100,class_mode='binary')\n\n","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:52:27.322584Z","iopub.execute_input":"2022-10-30T16:52:27.322944Z","iopub.status.idle":"2022-10-30T16:52:28.034266Z","shell.execute_reply.started":"2022-10-30T16:52:27.322912Z","shell.execute_reply":"2022-10-30T16:52:28.033208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for data_batch, labels_batch in train_generator:\n    print('data batch shape:',data_batch.shape)\n    print('labels batch shape:', labels_batch.shape)\n    break;","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:52:34.201451Z","iopub.execute_input":"2022-10-30T16:52:34.201809Z","iopub.status.idle":"2022-10-30T16:52:34.497459Z","shell.execute_reply.started":"2022-10-30T16:52:34.201778Z","shell.execute_reply":"2022-10-30T16:52:34.496024Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fitting the model using a batch generator","metadata":{}},{"cell_type":"code","source":"history = model.fit(train_generator,steps_per_epoch=180,epochs=25,validation_data=validation_generator,validation_steps=70)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T17:23:15.655559Z","iopub.execute_input":"2022-10-30T17:23:15.655937Z","iopub.status.idle":"2022-10-30T17:53:15.940248Z","shell.execute_reply.started":"2022-10-30T17:23:15.655904Z","shell.execute_reply":"2022-10-30T17:53:15.939217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Saving the Model","metadata":{}},{"cell_type":"code","source":"model.save('cats_and_dogs_1.h5')","metadata":{"execution":{"iopub.status.busy":"2022-10-30T18:01:34.220570Z","iopub.execute_input":"2022-10-30T18:01:34.220943Z","iopub.status.idle":"2022-10-30T18:01:34.324810Z","shell.execute_reply.started":"2022-10-30T18:01:34.220913Z","shell.execute_reply":"2022-10-30T18:01:34.323791Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! dir /kaggle/working/","metadata":{"execution":{"iopub.status.busy":"2022-10-30T18:01:35.930080Z","iopub.execute_input":"2022-10-30T18:01:35.930515Z","iopub.status.idle":"2022-10-30T18:01:36.918297Z","shell.execute_reply.started":"2022-10-30T18:01:35.930478Z","shell.execute_reply":"2022-10-30T18:01:36.917117Z"},"trusted":true},"execution_count":null,"outputs":[]}]}