{"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":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\n\nfrom tensorflow.keras.utils    import to_categorical\nfrom keras.applications.inception_v3 import InceptionV3\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras import layers\nfrom tensorflow.keras import models\nfrom tensorflow.keras import optimizers\n\n\nimport os, shutil\n\n\n\ndef image_checker(gen):\n    while True:\n        try:\n            data, labels = next(gen)\n            yield data, labels\n        except:\n            pass\n\noriginal_dir = '.../input/dogs-vs-cats-redux-kernels-edition'\noriginal_zip_dataset_dir = '../input/dogs-vs-cats-redux-kernels-edition/train.zip'\noriginal_zip_test_dir = '../input/dogs-vs-cats-redux-kernels-edition/test.zip'\nunzipped_base_dir = '../working/cats_and_dogs_full_unzipped'\nunzipped_train = os.path.join(unzipped_base_dir, 'train')\nunzipped_test = os.path.join(unzipped_base_dir, 'test')\noriginal_cats_dataset_dir = unzipped_train\noriginal_dogs_dataset_dir = unzipped_train\noriginal_test_dir = os.path.join(unzipped_test, 'test')\nbase_dir = '../working/cats_and_dogs_full'\nif os.path.exists(base_dir) and os.path.isdir(base_dir):\n\tshutil.rmtree(base_dir)\n\n\n\nimport zipfile\nwith zipfile.ZipFile(original_zip_dataset_dir,\"r\") as z:\n    z.extractall(unzipped_base_dir)\nwith zipfile.ZipFile(original_zip_test_dir,\"r\") as z:\n    z.extractall(unzipped_test)\n\n    \nlist = os.listdir(unzipped_train)\nnumber_files = len(list)\nprint(\"Number of files in the trainining set:\",number_files)\nlist = os.listdir(original_test_dir) \nnumber_files = len(list)\nprint(\"Number of files in the test set:\",number_files)\n\n\nos.mkdir(base_dir)\ntrain_dir = os.path.join(base_dir, 'train')\nos.mkdir(train_dir)\nvalidation_dir = os.path.join(base_dir, 'validation')\nos.mkdir(validation_dir)\ntest_dir = os.path.join(base_dir,'test')\nos.mkdir(test_dir)\n\ntrain_cats_dir = os.path.join(train_dir, 'cats')\nos.mkdir(train_cats_dir)\ntrain_dogs_dir = os.path.join(train_dir, 'dogs')\nos.mkdir(train_dogs_dir)\nvalidation_cats_dir = os.path.join(validation_dir, 'cats')\nos.mkdir(validation_cats_dir)\nvalidation_dogs_dir = os.path.join(validation_dir, 'dogs')\nos.mkdir(validation_dogs_dir)\n\n\nfnames = ['cat.{}.jpg'.format(i) for i in range(8000)]\nfor fname in fnames:\n\tsrc = os.path.join(original_cats_dataset_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(train_cats_dir, fname)\n\t\tshutil.copyfile(src,dst)\nfnames = ['cat.{}.jpg'.format(i) for i in range(8000, 12500)]\nfor fname in fnames:\n\tsrc = os.path.join(original_cats_dataset_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(validation_cats_dir, fname)\n\t\tshutil.copyfile(src, dst)\nfnames = ['dog.{}.jpg'.format(i) for i in range(8000)]\nfor fname in fnames:\n\tsrc = os.path.join(original_dogs_dataset_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(train_dogs_dir, fname)\n\t\tshutil.copyfile(src, dst)\nfnames = ['dog.{}.jpg'.format(i) for i in range(8000, 12500)]\nfor fname in fnames:\n\tsrc = os.path.join(original_dogs_dataset_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(validation_dogs_dir, fname)\n\t\tshutil.copyfile(src, dst)\nfnames = ['dog.{}.jpg'.format(i) for i in range(8000, 12500)]\nfor fname in fnames:\n\tsrc = os.path.join(original_dogs_dataset_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(validation_dogs_dir, fname)\n\t\tshutil.copyfile(src, dst)\nfnames = ['{}.jpg'.format(i+1) for i in range(12500)]\nfor fname in fnames:\n\tsrc = os.path.join(original_test_dir, fname)\n\tif os.path.exists(src):\n\t\tdst = os.path.join(test_dir, fname)\n\t\tshutil.copyfile(src, dst)\n        \n\n\ntrain_datagen = ImageDataGenerator(rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,\n                                   shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')\ntest_datagen = ImageDataGenerator(rescale=1./255)\n\ntrain_generator = train_datagen.flow_from_directory(train_dir,target_size=(300, 300),batch_size=40,class_mode='binary')\nvalidation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(300, 300),batch_size=40,class_mode='binary')\ntest_generator = test_datagen.flow_from_directory(base_dir,target_size=(300, 300),batch_size=40,classes=['test'])\n\n\nconv_base = InceptionV3(weights='imagenet',include_top=False, input_shape=(300,300,3), pooling=\"avg\")\nmodel = models.Sequential()\nmodel.add(conv_base)\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(1024,activation='relu'))\nmodel.add(layers.Dense(1,activation='sigmoid'))\nprint(model.summary())\nconv_base.trainable = False\nmodel.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(learning_rate=1e-4),metrics=['acc'])\n\nhistory = model.fit(image_checker(train_generator),steps_per_epoch=400,epochs=30,validation_data=validation_generator,validation_steps=225)\n\nmodel.save('cats_and_dogs_large_12.h5')\n\n\nacc = history.history['acc']\nval_acc = history.history['val_acc']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\nepochs = range(1, len(acc) + 1)\nplt.plot(epochs, acc, 'bo', label='Training acc')\nplt.plot(epochs, val_acc, 'b', label='Validation acc')\nplt.title('Training and validation accuracy')\nplt.legend()\nplt.figure()\nplt.plot(epochs, loss, 'bo', label='Training loss')\nplt.plot(epochs, val_loss, 'b', label='Validation loss')\nplt.title('Training and validation loss')\nplt.legend()\n\n\npredictions = model.predict(test_generator, steps=313)\npredictions = predictions.reshape(1,-1)[0]\n\npid = []\nlabels = []\nfor i in range(1,len(predictions)+1):\n\tpid.append(i)\n\tif (predictions[i-1] > 0.5):\n\t\tlabels.append(1)\n\telse:\n\t\tlabels.append(0)\n\noutput  = pd.DataFrame({'id': pid, 'label': labels})\noutput.to_csv('my_submission_code12.csv',index=False)\n\nif os.path.exists(base_dir) and os.path.isdir(base_dir):\n\tshutil.rmtree(base_dir)\n","metadata":{"execution":{"iopub.status.busy":"2021-09-05T14:53:55.071877Z","iopub.execute_input":"2021-09-05T14:53:55.072213Z","iopub.status.idle":"2021-09-05T14:53:58.363169Z","shell.execute_reply.started":"2021-09-05T14:53:55.072138Z","shell.execute_reply":"2021-09-05T14:53:58.3614Z"},"trusted":true},"execution_count":null,"outputs":[]}]}