{"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":"markdown","source":"# Import Library","metadata":{"_uuid":"fe76d1d1ded592430e7548feacfa38dc42f085d9"}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nfrom keras.preprocessing.image import ImageDataGenerator, load_img\nfrom keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport random\nimport os\nimport shutil\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-08T17:57:57.177677Z","iopub.execute_input":"2022-11-08T17:57:57.178302Z","iopub.status.idle":"2022-11-08T17:57:59.085425Z","shell.execute_reply.started":"2022-11-08T17:57:57.178249Z","shell.execute_reply":"2022-11-08T17:57:59.084363Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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-11-08T17:58:01.524463Z","iopub.execute_input":"2022-11-08T17:58:01.524783Z","iopub.status.idle":"2022-11-08T17:58:01.531373Z","shell.execute_reply.started":"2022-11-08T17:58:01.524741Z","shell.execute_reply":"2022-11-08T17:58:01.530296Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.path.abspath('')","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:02.014374Z","iopub.execute_input":"2022-11-08T17:58:02.014753Z","iopub.status.idle":"2022-11-08T17:58:02.022389Z","shell.execute_reply.started":"2022-11-08T17:58:02.014688Z","shell.execute_reply":"2022-11-08T17:58:02.021674Z"},"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-11-08T17:58:02.351845Z","iopub.execute_input":"2022-11-08T17:58:02.352488Z","iopub.status.idle":"2022-11-08T17:58:02.356591Z","shell.execute_reply.started":"2022-11-08T17:58:02.352436Z","shell.execute_reply":"2022-11-08T17:58:02.355525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! unzip /kaggle/input/test1.zip -d \"/kaggle/working/base_dir\"","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:02.650270Z","iopub.execute_input":"2022-11-08T17:58:02.650793Z","iopub.status.idle":"2022-11-08T17:58:09.423389Z","shell.execute_reply.started":"2022-11-08T17:58:02.650541Z","shell.execute_reply":"2022-11-08T17:58:09.422345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! unzip /kaggle/input/train.zip -d \"/kaggle/working/base_dir\"","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:09.424711Z","iopub.execute_input":"2022-11-08T17:58:09.425166Z","iopub.status.idle":"2022-11-08T17:58:21.741507Z","shell.execute_reply.started":"2022-11-08T17:58:09.425113Z","shell.execute_reply":"2022-11-08T17:58:21.740027Z"},"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)","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:21.743209Z","iopub.execute_input":"2022-11-08T17:58:21.743509Z","iopub.status.idle":"2022-11-08T17:58:21.751998Z","shell.execute_reply.started":"2022-11-08T17:58:21.743463Z","shell.execute_reply":"2022-11-08T17:58:21.750790Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"On met les 9000 premières images de chat dans le fichier train_cats_dir pour entrainer l'ia plus tard","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-11-08T17:58:21.753329Z","iopub.execute_input":"2022-11-08T17:58:21.753768Z","iopub.status.idle":"2022-11-08T17:58:22.924144Z","shell.execute_reply.started":"2022-11-08T17:58:21.753724Z","shell.execute_reply":"2022-11-08T17:58:22.923157Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"On fait la même chose pour les chiens","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-11-08T17:58:22.925540Z","iopub.execute_input":"2022-11-08T17:58:22.925986Z","iopub.status.idle":"2022-11-08T17:58:23.281471Z","shell.execute_reply.started":"2022-11-08T17:58:22.925776Z","shell.execute_reply":"2022-11-08T17:58:23.280406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"On fait maintenant la même chose pour la validation et non plus l'entrainement","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)\n    \nfnames = ['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-11-08T17:58:23.283170Z","iopub.execute_input":"2022-11-08T17:58:23.283660Z","iopub.status.idle":"2022-11-08T17:58:23.571093Z","shell.execute_reply.started":"2022-11-08T17:58:23.283612Z","shell.execute_reply":"2022-11-08T17:58:23.570026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"On va maintenant définir le modèle du réseau de neurones :","metadata":{}},{"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'))\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.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'))\n\nmodel.summary()","metadata":{"_uuid":"8c9f833c1441b657c779844912d0b8028218d454","execution":{"iopub.status.busy":"2022-11-08T17:58:23.572411Z","iopub.execute_input":"2022-11-08T17:58:23.572664Z","iopub.status.idle":"2022-11-08T17:58:23.739705Z","shell.execute_reply.started":"2022-11-08T17:58:23.572613Z","shell.execute_reply":"2022-11-08T17:58:23.738920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras import optimizers\nimport tensorflow as tf\nmodel.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['acc'])","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:23.741068Z","iopub.execute_input":"2022-11-08T17:58:23.741314Z","iopub.status.idle":"2022-11-08T17:58:23.796826Z","shell.execute_reply.started":"2022-11-08T17:58:23.741271Z","shell.execute_reply":"2022-11-08T17:58:23.795071Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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')","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:23.799164Z","iopub.execute_input":"2022-11-08T17:58:23.799524Z","iopub.status.idle":"2022-11-08T17:58:24.626716Z","shell.execute_reply.started":"2022-11-08T17:58:23.799458Z","shell.execute_reply":"2022-11-08T17:58:24.625647Z"},"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-11-08T17:58:24.628129Z","iopub.execute_input":"2022-11-08T17:58:24.628400Z","iopub.status.idle":"2022-11-08T17:58:25.006742Z","shell.execute_reply.started":"2022-11-08T17:58:24.628358Z","shell.execute_reply":"2022-11-08T17:58:25.005727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit_generator(train_generator,steps_per_epoch=90,epochs=20,validation_data=validation_generator,validation_steps=70)","metadata":{"execution":{"iopub.status.busy":"2022-11-08T17:58:25.008665Z","iopub.execute_input":"2022-11-08T17:58:25.009081Z","iopub.status.idle":"2022-11-08T23:40:46.356204Z","shell.execute_reply.started":"2022-11-08T17:58:25.009006Z","shell.execute_reply":"2022-11-08T23:40:46.355057Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}