{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","scrolled":true,"execution":{"iopub.status.busy":"2022-05-11T16:11:33.714486Z","iopub.execute_input":"2022-05-11T16:11:33.714812Z","iopub.status.idle":"2022-05-11T16:11:33.746317Z","shell.execute_reply.started":"2022-05-11T16:11:33.714730Z","shell.execute_reply":"2022-05-11T16:11:33.745618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!unzip ../input/dogs-vs-cats/train.zip -d .","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-05-11T16:11:37.472322Z","iopub.execute_input":"2022-05-11T16:11:37.472876Z","iopub.status.idle":"2022-05-11T16:11:49.332328Z","shell.execute_reply.started":"2022-05-11T16:11:37.472837Z","shell.execute_reply":"2022-05-11T16:11:49.331563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!unzip ../input/dogs-vs-cats/test1.zip -d .","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-05-11T16:11:49.334425Z","iopub.execute_input":"2022-05-11T16:11:49.334977Z","iopub.status.idle":"2022-05-11T16:11:55.421022Z","shell.execute_reply.started":"2022-05-11T16:11:49.334933Z","shell.execute_reply":"2022-05-11T16:11:55.420073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%mkdir ./train/cat\n%mkdir ./train/dog\n%mkdir ./model","metadata":{"execution":{"iopub.status.busy":"2022-05-11T16:12:23.048680Z","iopub.execute_input":"2022-05-11T16:12:23.049451Z","iopub.status.idle":"2022-05-11T16:12:24.462400Z","shell.execute_reply.started":"2022-05-11T16:12:23.049412Z","shell.execute_reply":"2022-05-11T16:12:24.461486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from os import listdir\nfrom os.path import isfile, join\nimport shutil\n\nmypath = './train'\n\nonlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]\n\nfor file in onlyfiles:\n    if \"cat\" in file: \n        shutil.move(f\"{mypath}/{file}\", f\"{mypath}/cat/{file}\")\n    if \"dog\" in file:\n        shutil.move(f\"{mypath}/{file}\", f\"{mypath}/dog/{file}\")","metadata":{"execution":{"iopub.status.busy":"2022-05-11T16:12:25.905518Z","iopub.execute_input":"2022-05-11T16:12:25.906130Z","iopub.status.idle":"2022-05-11T16:12:26.745105Z","shell.execute_reply.started":"2022-05-11T16:12:25.906092Z","shell.execute_reply":"2022-05-11T16:12:26.744242Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport random\nfrom tensorflow import keras\nfrom tensorflow.keras.models import Sequential, load_model\nfrom tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import SGD\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom tensorflow.keras.preprocessing import image\nimport numpy as np\nimport matplotlib.pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2022-05-11T16:18:00.188913Z","iopub.execute_input":"2022-05-11T16:18:00.189182Z","iopub.status.idle":"2022-05-11T16:18:00.195548Z","shell.execute_reply.started":"2022-05-11T16:18:00.189153Z","shell.execute_reply":"2022-05-11T16:18:00.194580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(validation_split=0.2)\ntrain_data = datagen.flow_from_directory(directory=\"train\", target_size=(224,224), batch_size=32, shuffle=True, class_mode='binary', subset=\"training\")\nval_data = datagen.flow_from_directory(directory=\"train\", target_size=(224,224), batch_size=32, shuffle=True, class_mode='binary', subset=\"validation\")","metadata":{"execution":{"iopub.status.busy":"2022-05-11T16:12:36.325766Z","iopub.execute_input":"2022-05-11T16:12:36.326361Z","iopub.status.idle":"2022-05-11T16:12:37.624972Z","shell.execute_reply.started":"2022-05-11T16:12:36.326333Z","shell.execute_reply":"2022-05-11T16:12:37.624255Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 여기에 구현한 모델을 넣어주세요\n# 아래 코드부터는 구현된 모델의 변수명이 model 이라고 가정하고 진행됩니다\nmodel = Sequential()\nmodel.add(Conv2D(input_shape=(224,224,3),filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(units=4096,activation=\"relu\"))\nmodel.add(Dense(units=4096,activation=\"relu\"))\nmodel.add(Dense(units=2, activation=\"softmax\"))","metadata":{"execution":{"iopub.status.busy":"2022-05-11T16:38:24.466810Z","iopub.execute_input":"2022-05-11T16:38:24.467073Z","iopub.status.idle":"2022-05-11T16:38:24.614887Z","shell.execute_reply.started":"2022-05-11T16:38:24.467043Z","shell.execute_reply":"2022-05-11T16:38:24.614092Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"opt = SGD(learning_rate=1e-4, momentum=0.9)\nmodel.compile(optimizer=opt, loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-05-11T17:06:28.909814Z","iopub.execute_input":"2022-05-11T17:06:28.910103Z","iopub.status.idle":"2022-05-11T17:06:28.937924Z","shell.execute_reply.started":"2022-05-11T17:06:28.910070Z","shell.execute_reply":"2022-05-11T17:06:28.937058Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"modelpath = 'model/model.h5'\ncheckpoint = ModelCheckpoint(filepath=modelpath, monitor='val_loss', save_best_only=True, save_weights_only=False, save_freq=\"epoch\")\nearly = EarlyStopping(monitor='val_loss', min_delta=0, patience=50, verbose=1, mode='auto')\nhist = model.fit(train_data, steps_per_epoch=10, validation_steps=10, validation_data=val_data, epochs=200, callbacks=[checkpoint, early])","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-05-11T17:26:31.447822Z","iopub.execute_input":"2022-05-11T17:26:31.448163Z","iopub.status.idle":"2022-05-11T17:31:21.405105Z","shell.execute_reply.started":"2022-05-11T17:26:31.448119Z","shell.execute_reply":"2022-05-11T17:31:21.404366Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(hist.history['accuracy'])\nplt.plot(hist.history['val_accuracy'])\nplt.plot(hist.history['loss'])\nplt.plot(hist.history['val_loss'])\nplt.title(\"model accuracy\")\nplt.ylabel(\"Accuracy\")\nplt.xlabel(\"Epoch\")\nplt.legend([\"Accuracy\",\"Validation Accuracy\",\"loss\",\"Validation Loss\"])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-05-11T17:31:21.407106Z","iopub.execute_input":"2022-05-11T17:31:21.407351Z","iopub.status.idle":"2022-05-11T17:31:21.631154Z","shell.execute_reply.started":"2022-05-11T17:31:21.407314Z","shell.execute_reply":"2022-05-11T17:31:21.630498Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_num = random.randint(1, 12500)\n\nimg = image.load_img(f\"test1/{img_num}.jpg\",target_size=(224,224))\nimg = np.asarray(img)\nplt.imshow(img)\nimg = np.expand_dims(img, axis=0)","metadata":{"execution":{"iopub.status.busy":"2022-05-11T17:31:21.632419Z","iopub.execute_input":"2022-05-11T17:31:21.632832Z","iopub.status.idle":"2022-05-11T17:31:21.848145Z","shell.execute_reply.started":"2022-05-11T17:31:21.632794Z","shell.execute_reply":"2022-05-11T17:31:21.847493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"saved_model = load_model(modelpath)\noutput = saved_model.predict(img)\nif output[0][0] > output[0][1]:\n    print(\"it's cat\")\nelse:\n    print(\"it's dog\")","metadata":{"execution":{"iopub.status.busy":"2022-05-11T17:31:21.849816Z","iopub.execute_input":"2022-05-11T17:31:21.850237Z","iopub.status.idle":"2022-05-11T17:31:24.395114Z","shell.execute_reply.started":"2022-05-11T17:31:21.850200Z","shell.execute_reply":"2022-05-11T17:31:24.394354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}