{"cells":[{"metadata":{},"cell_type":"markdown","source":"This Kernel for someone want to deep dive into image classification. I use CNN for classification model. If you found this Kernel helpful please up vote it. If you have some feedback and question don't forget to comment below. \n\nI have simplier model with \n* https://www.kaggle.com/uysimty/get-start-image-classification"},{"metadata":{"_uuid":"fe76d1d1ded592430e7548feacfa38dc42f085d9"},"cell_type":"markdown","source":"# Import Library"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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 # 여러 개의 Y값을 0과 1로만 이루어진 형태로 바꿔주는 one-hot-encoding\nfrom sklearn.model_selection import train_test_split # scikit-learn 패키지 중 model_selection에 데이터 분할을 위한 train_test_split 함수가 있음.\nimport matplotlib.pyplot as plt\nimport random\nimport os # os.listdir을 쓰기 위해서\nprint(os.listdir(\"../input\")) # input 디렉토리 내에 있는 모든 파일 및 디렉토리 '리스트'를 가져와서 indexing 한다.\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from IPython.display import Image\nImage(\"../input/picture/picture.png\")\n# Add data를 해서 다운받기 전의 디렉토리","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Define Constants"},{"metadata":{"trusted":true},"cell_type":"code","source":"FAST_RUN = False # 아래에 사용됨\nIMAGE_WIDTH=128 # 이미지 넓이(행)\nIMAGE_HEIGHT=128 # 이미지 높이(열)\nIMAGE_SIZE=(IMAGE_WIDTH, IMAGE_HEIGHT)\nIMAGE_CHANNELS=3 # 이미지 channel(depth)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7335a579cc0268fba5d34d6f7558f33c187eedb3"},"cell_type":"markdown","source":"# Prepare Traning Data"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"filenames = os.listdir(\"../input/dogs-vs-cats/train/train\") # os.listdir은 디렉토리 내에 있는 모든 파일 및 디렉토리 리스트를 가져와서 indexing 한다.\ncategories = [] # 빈 list 한 개 만든다.\nfor filename in filenames:              # filenames에 있는 list들을 한 개씩 받아온다.                       \n    category = filename.split('.')[0]   # . 을 기준으로 나누고, '0'위치에 있는 것을 category 변수에 저장\n    if category == 'dog':\n        categories.append(1) # 강아지이면 1을 넣고 (append : 덧붙이다)\n    else:\n        categories.append(0) # 강아지가 아니면(고양이면) 0을 넣어라\n\ndf = pd.DataFrame({\n    'filename': filenames,\n    'category': categories\n}) # 데이터프레임 만들기 -  filename이라는 col에 filenames value 넣기, category라는 col에 categories value 넣기","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"filenames # 형태 보기\n# 주의: filenames는 list이기 때문에 shape, head() attribute를 갖지 않음","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"915bb9ba7063ab4d5c07c542419ae119003a5f98"},"cell_type":"code","source":"df.head() # filename이 무엇인지 알 수 있고 category가 잘 나뉘었는지도 확인 가능하다.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"72bf69e817f67f5a2eaff8561217e22077248553"},"cell_type":"code","source":"df.tail() # filename이 무엇인지 알 수 있고 category가 잘 나뉘었는지도 확인 가능하다. // 25000개의 data가 있음을 알 수 있다.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a999484fc35b73373fafe2253ae9db7ff46fdb90"},"cell_type":"markdown","source":"### See Total In count"},{"metadata":{"trusted":true,"_uuid":"fa26f0bc7a6d835a24989790b20f3c6f32946f45"},"cell_type":"code","source":"df['category'].value_counts().plot.bar()\n# df 데이터프레임에 있는 category col에 있는 value들을 count 해서 bar plot을 그려라.\n# 개와 고양이가 몇 마리씩 되는지 대략 알 수 있다.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3a08da58107777a1dd05c4a4bf5c484484923cac"},"cell_type":"markdown","source":"From our data we have 12000 cats and 12000 dogs"},{"metadata":{"_uuid":"400a293df3c8499059d9175f3915187074efd971"},"cell_type":"markdown","source":"# See sample image"},{"metadata":{"trusted":true,"_uuid":"602b40f7353871cb161c60b5237f0da0096b2f47"},"cell_type":"code","source":"# random.choice를 사용하기 위해 위에서 import random을 사용.\n# 내가 가지고 있던 디렉토리에 있는 list중에서 아무거나 1개 sampling한다\nsample = random.choice(filenames)\n\n# from keras.preprocessing.image import ImageDataGenerator, load_img를 쓴 이유\nimage = load_img(\"../input/dogs-vs-cats/train/train/\"+sample)\nplt.imshow(image) # matplotlib에서 이미지 불러옴","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b244e6b7715a04fc6df92dd6dfa3d35c473ca600"},"cell_type":"markdown","source":"# Build Model\n\n<img src=\"https://i.imgur.com/ebkMGGu.jpg\" width=\"100%\"/>"},{"metadata":{},"cell_type":"markdown","source":"* **Input Layer**: It represent input image data. It will reshape image into single diminsion array. Example your image is 64x64 = 4096, it will convert to (4096,1) array.\n* **Conv Layer**: This layer will extract features from image.\n* **Pooling Layer**: This layerreduce the spatial volume of input image after convolution.\n* **Fully Connected Layer**: It connect the network from a layer to another layer\n* **Output Layer**: It is the predicted values layer. "},{"metadata":{"trusted":true,"_uuid":"8c9f833c1441b657c779844912d0b8028218d454"},"cell_type":"code","source":"from keras.models import Sequential # sequential model은 layer를 선형으로 연결하여 구성한다. \nfrom keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense, Activation, BatchNormalization\n# ㄴ keras.layers에서 pooling, dropout등 cnn을 구성하는데 쓰이는 방법들을 import\n\nmodel = Sequential() # 가장 자주 사용하는 구조인 층을 순서대로 쌓아 올린 네트워크{keras 사용 - 모델을 정의(생성)}\n\n\n# Convolution\n# 인공신경망 모델을 효율적으로 학습시키기 윈한 개선 방법들 (BatchNormalization, Dropout, ModelEnsemble)\n\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_CHANNELS)))\n# 32는 convolution filter 수 // (3,3): kernel_size. --> 즉, convolution kernel의 (행,열)\n# activation function(활성화 함수)은 relu를 사용\n# ㄴ sigmoid보다 relu 함수를 사용하는 이유: 신경망이 깊어 질수록 학습이 어렵기 때문에 전체 계층을 한번 계산한 후 그 계산된 값을 다시 계산하는\n#    역전파(Back Propagation)이라는 방법을 사용하는데 sigmoid함수를 activation function으로 사용할 경우, 계층이 깊어지면 Gradient Vanishing(그라디언트 소실)문제가\n#    발생하기 때문에 relu 함수를 사용한다.\n\n# 만들어진 모델은 입력 형태에 대한 정보가 필요하기에 Sequential model의 첫 번째 layer는 입력 형태에 대한 정보를 받아야한다.\n# 두 번째 이후의 layer들은 자동으로 형태를 추정할 수 있기에 input_shape문을 쓸 필요가 없다.\n# input_shape에는 batch dimension은 포함되지 않는다.\n\nmodel.add(BatchNormalization()) # 인공신경망에 입력값을 평균0, 분산1로 정규화해서 네트워크의 학습이 잘 일어나도록 돕는다.\nmodel.add(MaxPooling2D(pool_size=(2, 2))) # 2 by 2 filter로 max pooling\nmodel.add(Dropout(0.25)) # 과적합을 방지하기 위해 activation을 0.25의 확률로 지워버린다.\n\n\n\nmodel.add(Conv2D(64, (3, 3), activation='relu')) # filter수가 늘어남\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\n\n\nmodel.add(Conv2D(128, (3, 3), activation='relu')) # filter수가 더 늘어남\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\n\n\nmodel.add(Flatten()) # - 이 층에는 학습되는 가중치가 없고 데이터를 변환하기만 한다.(1차원 vector으로 바꿈)\n                     # - 이 층은 하나의 layer에 있는 모든 neuron을 또 다른 layer의 모든 neuron과 연결 시켜준다.\nmodel.add(Dense(512, activation='relu')) # dense로 층을 쌓음 - 첫번째 Dense층은 512개의 노드를 가짐\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax')) # 2: because we have cat and dog classes\n                                          # 마지막 층은 2개의 노드의 소프트맥스층 : 이 층은 2개의 확률을 반환하고 반환된 값의 전체 합은 1이다. \n                                          # 각 노드는 현재 이미지가 2개 클래스 중 하나에 속할 확률을 출력\n\nmodel.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) \n# 컴파일 단계 : 학습과정 설정, categorical_crossentropy(손실함수, 가중치 텐서를 학습하기 위한 피드백 신호로 사용되며 훈련하는 동안 최소화 된다.\n#                                                     미니 배치 확률적 경사 하강법을 통해 손실이 감소됨.)\n# optimizer : 데이터와 손실 함수를 바탕으로 모델의 업데이트 방법을 결정\n# rmsprop: 과거의 모든 기울기를 균일하게 더하지 않고 새로운 기울기의 정보만 반영하도록 해서 학습률이 크게 떨어져 0에 가까워지는 것을 방지하는 방법이다.\n\n\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bd496f6c65888a969be3703135b0b03a8a1190c8"},"cell_type":"markdown","source":"# Callbacks"},{"metadata":{"trusted":true,"_uuid":"9aa032f0f6da539d23918890d2d131cc3aac8c7a"},"cell_type":"code","source":"from keras.callbacks import EarlyStopping, ReduceLROnPlateau # 학습 조기종료를 사용하기 위해 import","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"76c9ba4fb7f930c96b2c3e0d6b68ed9fa6a4227b"},"cell_type":"markdown","source":"**Early Stop**\n\nTo prevent over fitting we will stop the learning after 10 epochs and val_loss value not decreased"},{"metadata":{"trusted":true,"_uuid":"3421c5ec428da6c0d8cc1184179a9caff1e01d1c"},"cell_type":"code","source":"# 학습 횟수(=epoch수)가 많을수록 학습 데이터에 관한 오차는 작아지지만 이것이 overfitting을 초래해서 모델의 \"일반화\" 성능이 떨어지게 된다.\n# 이전 epoch때와 비교해서 '오차가 증가했다면' 학습을 중단한다 라는 방법인데,\n# 주의할점: 오차값은 각 epoch마다 올라가기도 하고 내려가기도 하며, dropout을 적용한 경우에는 아직 학습이 되지 않은\n# 뉴런이 존재할 가능성이 있기 때문에 오차값이 상하로 움직이게 된다.\n# 따라서 \"어떤 일정한 epoch수를 거듭하면서 계속해서 오차가 증가하면 학습을 중단한다\"는 방식으로 구현해야한다.\n# 아래의 예시를 보면 patience는 오차가 증가하는 즉, \"개선이 없는 epoch수\"가 patience에 지정된 수만큼 지속될 경우 학습을 종료시킬때 사용\n\n# 모델을 학습시키기 전에 다음과 같이 선언한다. 그다음 아래에 code를 보면 model.fit()이 있는데 callbacks=early_stopping을 사용하면 된다.\n# EarlyStopping은 callback함수이다.\n# callback함수: 어떤 함수를 수행 시 그 함수에서 내가 지정한 함수를 호출하는 것\n\nearlystop = EarlyStopping(patience=10) # 학습 조기종료를 뜻함 -> overfitting을 막기 위해서 10epoch 만큼 거슬러 올라가 볼 때 \n                                       # \"validation loss값이 감소하지 않으면 학습을 중단하라.\" 라는 뜻이다.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![python image2](data:image/png;base64,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F7BTrRstAdg8ciQrZENJAnBl82ZZvh+E+XxgIA6qfB97jGrDAG18800C4NemzUkvL6IdqB385RcCsO/LL3WqVJydjeqBRVli/0rctIkALH/6aUmtPvTrr5fDwnDPTW+NIFrP6uAXXmAxFNlCLCTtxAksx49OUJ8+qF0klerimjVEO0zBP3Ct0a3Dh9f07Jl68CAbubKzYSvgFsctRtThpKcnyoKNeH7FCuwbJUVG4lOx+IknqHY1i0/TppRStnCFbccXLJAkOTtbhU8pesluHTsWe2b7vvpKVVKi/zBQSnEclhITwxYul967x6tDtvFa/8iff/LLe3Db8Npr/JlZlE3sNDB39Mjp03OuXtW5Cehdj9vi5s35DhYb3mWcO69fKz5OiLqsDAsP/vzzpaAgTVW1jt/8UQYXFPCrd1CFs/uDwSvwZdz/zTdsFTsGd8NredWrl52QwCLDYNxNbFN81zDKJmo7FhANN486ddD/7qSXV3a26l5KasTUqZnnzqFqx2V+CAvBdviPPygbfHOx5zBYJotgU5afX3rvHrOUEM5scGHVKtwTM2HrJ2xmMUzChg0zPfSYcfintBKY8j3PysoaOXLk448/3rZtWx8fH0ppUFDQjBkzKKXff/+9q6trW44lS5ZQSvv06dOsWTO+/HSVRQcTCtg8du++AUB69FhtlfroxHzA7fquXezzpGOCxlHR0b/+QkXCAimc9vUN6NgRQ0lETJ2KJjsWThbPtur553GZUHZCAqW0JDdXWVyMI57LGzbgNw57/YubN5fL8TvAlULMDqn5Rmtj/1JtJAcCcCk4mBWy/gQByLxwgVKKMSBxDSIObXFRCi7kxXFAUJ8+SRERRJs7lmkRnSphzKzATp0kler4/PkYmwJB718CgIMV/Kh5OjmhdRFH3utffZVpU/927fgzMzsEridGcz0G8JJl+fTixZeCgzcOH4778ONsSmlhevqBH3/MS05mJbIss+kGI8tmcApg88iRuLz4anj4htdew0Pwa45rTAszMljd2MIVtqF5k4FDtMhp09JPnjwyZw5mFcTBk46lETU0PiGakff587k3bug/pXj4htdei/nhh8KMDEz3xG+4npsHD8E4ISwHF9HmUaaUKouKsEOA3Qs27MYVXLgxi8KtI0f0a3Vtxw52ObaOaMcHH+D0x76vvmID6E1vvcWOupeU9EAT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+9mzZ9iekpLy9ddfN23a1NXV9T//+Q9uZOzYsd9++62Hh4erq+vff/+Na965c6dnz54eHh5169YNDg4uDYk5HKeDK2AOxx758MMPZ8yYIYpienp627Zt9+zZ4+Pj89prr23YsIFSmpWV1aNHjx9++IFSGh0dXatWrWPHjlFKc3NzR44cOXjwYEqpWq1u377977//rlKpKKU3b96klPr4+FStWjUkJIRSGhkZWb58+ejoaEpply5dVq5ciVuIj48vNbE5HGeCK2AOx+64ePFio0aNRFHEj35+fiNHjvTx8cHi88i5c+fc3NwopVOmTPnpp59Y+7Nnz1xcXDIyMvbt29euXTvZln18fPr168c+durUCe3dnj17Tpo0yXHrTnI4jghXwByO3bF169aKFSuyEnX16tXz8vKSTd/ev3+/SpUqlNJPPvlk7dq10p+//vrr169fJ4R8+eWXsi3LNsJqoSclJX355Zd16tSZNm1abm7uixONw+EwuALmcOyOU6dOvfXWW7JGHx8fHFtG9u3b17ZtW0rphAkTpk+fztqfP39erly558+fb9q06YMPPtDfiEEFjDx9+rRfv37e3t62E4XD4RQLV8Acjt2hUqlatGixfPlyHIW+fPlyTEyMj49PpUqVjhw5QilNSkpq167dqlWr8NsaNWpgafq8vLyvvvpq3LhxlNLMzMz69esvXrxYEARKKdZCL04BHz16FFebMWPGiBEjXrbAHI5TwhUwh2OP3Lt3r2/fvvXr12/SpMlnn30WHx/v4+MzYsSIIUOGNGjQoHnz5gsWLGCTxEePHu3UqVPDhg1btGjxyy+/5OXlYXt0dPQnn3xSr149d3f377//nhavgAcPHly7du2mTZv279//8ePHL1taDscp4QqYw3EMeAgvh6MwuALmcBwDroA5HIXBFTCH4xhwBczhKAyugDkcDofDKQW4AuZwOBwOpxTgCpjD4XA4nFKAK2AOh8PhcEoBroA5HA6HwykFuALmcDgcDqcU4AqYw+FwOJxSgCtgDofD4XBKAa6AORwOh8MpBbgC5nA4HA6nFOAKmMPhcDicUoArYA6Hw+FwSoH/BxGalzDAJfQxAAAAAElFTkSuQmCCAA==)"},{"metadata":{},"cell_type":"markdown","source":"![python image2](https://tykimos.github.io/warehouse/2017-7-9-Early_Stopping_1.png)"},{"metadata":{},"cell_type":"markdown","source":"![python image2](https://tykimos.github.io/warehouse/2017-7-9-Early_Stopping_4.png)"},{"metadata":{"trusted":true},"cell_type":"code","source":"earlystop","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"51d3fe52e911286433cedf6e47332948a253361e"},"cell_type":"markdown","source":"**Learning Rate Reduction**\n\nWe will reduce the learning rate when then accuracy not increase for 2 steps"},{"metadata":{"trusted":true},"cell_type":"code","source":"val_acc # 바로 아래에 code를 보면 monitor에 \"val_acc\"가 나온다. 그래서 이전에 정의가 되었는지 살펴보았다.\n        # 그런데 정의가 되지 않았다. 아래에 있는 'val_acc' code는 어디서 온것인지..?","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8010a5661ad8924d2db24af0f3c00b1593b38901"},"cell_type":"code","source":"learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', \n                                            patience=2, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)\n\n# 모델은 학습이 정체되면 학습 속도를 2-10배 감소시키는 '이점'이 있다. -  학습이 정체된다????\n# 이때, ReuceLROnplateau는 수량(??)을 모니터링하며 patience수의 epoch수가 '개선되지 않으면'(오차가 증가하면) 학습률이 감소한다.\n# monitor : 모니터링 할 수량 (val_acc : validation accuracy)\n# patience : 학습률이 감소한 후 개선되지 않은 epoch 수 ( 학습률이 감소한다 = 오차가 증가한다 = val_loss 증가 는 모두 같은말??)\n# verbose : 얼마나 자세하게 정보를 표시할 것인가를 지정한다.(0, 1, 2)\n# factor: 학습률이 감소하는 요인???\n# min_lr : 학습률의 하한","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a79cc604199469789f183096d863f7248e5f6aab"},"cell_type":"code","source":"callbacks = [earlystop, learning_rate_reduction] # callback에 2개의 함수를 저장","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callbacks","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Prepare data"},{"metadata":{},"cell_type":"markdown","source":"Because we will use image genaretor `with class_mode=\"categorical\"`. We need to convert column category into string. Then imagenerator will convert it one-hot encoding which is good for our classification. \n\nSo we will convert 1 to dog and 0 to cat"},{"metadata":{"trusted":true},"cell_type":"code","source":"df[\"category\"] = df[\"category\"].replace({0: 'cat', 1: 'dog'})\n\n# replace를 이용해서 0은 cat으로 1은 dog로 바꿔라.\n# 이유: image generator를 사용할 것이기 때문이고,\n#       image generator는 classification에 적합한 one-hot encoding을 변환한다.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head() # category 확인","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![python image2](https://blogfiles.pstatic.net/MjAyMDAzMTJfMjk4/MDAxNTg0MDAyODIyOTY3.rOeXE5YNP3qsJn7nNPsW92WFJCoMuXy6sExOziNxXBwg.ESAu3prRDMqyNnpwlE04d1IwB5KqAPcP-gA7IQrRQ5wg.PNG.wlsgh223/split.png)"},{"metadata":{"trusted":true,"_uuid":"4eeb7af8dcf02c4ef5ca744c8305c51a2f5cedef"},"cell_type":"code","source":"train_df, validate_df = train_test_split(df, test_size=0.20, random_state=42)\n# df: 분할시킬 data (DataFrame)\n# test_size: test dataset의 비율이나 갯수(default=0.25) -> 여기서는 validation set이라 할 수 있다.\n# random state: 데이터 분할시 셔플이 이루어지는데 이를 위한 시드값\n# shuffle: 셔플여부설정 (default=True)\n\ntrain_df = train_df.reset_index(drop=True) # index를 reset함 -> drop: index로 세팅한 열을 데이터프레임내에서 삭제할지 여부를 결정한다.\nvalidate_df = validate_df.reset_index(drop=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.head() # 제가 해본 건데, 위에 있는 code를 실행시키면 random_state가 시드값이어서 고정 되어있기 때문에\n#                 head()를 보면 계속 같은값으로 나오지만 shuffle default가 True여서, random_state를 빼면 head()가\n#                 계속 바뀌는걸 확인 했어요.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b84836337441705eda9d2e655665ffa14d9feead"},"cell_type":"code","source":"train_df['category'].value_counts().plot.bar() # train set의 cat과 dog의 빈도수를 plot으로 그림","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"validate_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"19cf03f9a3c39532d6e2d06bd30be49a5afd9d57"},"cell_type":"code","source":"validate_df['category'].value_counts().plot.bar() # validation set의 cat과 dog의 빈도수로 plot을 그림","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ae3dec0361f0443132d0309d3b883ee80070cf9f"},"cell_type":"code","source":"total_train = train_df.shape[0]\ntotal_validate = validate_df.shape[0]\nbatch_size=15","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 제가 뭔지 확인해 본거에요.\nprint(train_df.shape) \nprint(validate_df.shape) ","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ff760be9104f7d9492467b8d9d3405011aa77d11"},"cell_type":"markdown","source":"# Traning Generator"},{"metadata":{"trusted":true,"_uuid":"4d1c7818703a8a4bac5c036fdea45972aa9e5e9e"},"cell_type":"code","source":"# 신경망 모델의 성능을 높이기 위한 위한 \"데이터 부풀리기(Data augmentation)\"\ntrain_datagen = ImageDataGenerator(\n    rotation_range=15,\n    rescale=1./255,\n    shear_range=0.1,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    width_shift_range=0.1,\n    height_shift_range=0.1\n)\n# rotation_range : 지정된 각도 \"범위\"내에서 임의로 원본이미지를 회전시킨다. // 단위:(도) -> 여기서는 15니까, 0도에서 15도 사이\n# rescale : byte와 관련이 있는듯 255라는 숫자가\n# shear_range : 밀림 강도 범위내에서 임의로 원본이미지를 변형시킴\n\n# zoom_range : 지정된 확대/축소 범위내에서 임의로 원본이미지를 확대/축소. “1 - 수치”부터 “1 + 수치”사이 범위로 확대/축소.\n#              예를 들어 0.2이라면, 0.8배에서 1.2배 크기 변화를 시킵니다.\n\n# horizontal_flip : 수평방향으로 뒤집느냐 마느냐\n\n# width_shift_range : 지정된 \"수평방향\" 이동 범위내에서 임의로 원본이미지를 이동시킴. 수치는 \"전체 넓이\"의 비율(실수)로 나타냄.\n#                     예를 들어 0.1이고 전체 넓이가 100이면, 10픽셀 내외로 \"좌우\" 이동.\n\n# height_shift_range : 지정된 \"수직방향\" 이동 범위내에서 임의로 원본이미지를 이동시킴. 수치는 \"전체 높이\"의 비율(실수)로 나타냄..\n#                       예를 들어 0.1이고 전체 높이가 100이면, 10픽셀 내외로 \"상하\" 이동.\n\n\n# 'dataframe'과 '디렉토리'의 위치를 전달받아 증강/정규화된 데이터의 \"배치\"를 생성.\ntrain_generator = train_datagen.flow_from_dataframe( #generator가 뭔지 잘 모르겠네요..\n    train_df, # DataFrame (전체 중에 80%만 있음)\n    \"../input/dogs-vs-cats/train/train/\", # 문자열, 이미지를 읽을 '디렉토리'의 경로 (전체 data가 있음) \n    x_col='filename', # train_df 데이터프레임에 filename col의 값들을 가져옴\n    y_col='category', # train_df 데이터프레임에 category col의 값들을 가져옴\n    target_size=IMAGE_SIZE, # \n    class_mode='categorical', # 2D numpy array of one-hot encoded labels. Supports multi-label output.\n    batch_size=batch_size # batch size\n)\n\n# ㄴ 20000개의 image가 발견됨. (25000개 중에서 80%인 20000개)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"859c7b2857939c19fd2e3bb32839c9f7deb5aa3f"},"cell_type":"markdown","source":"### Validation Generator"},{"metadata":{"trusted":true,"_uuid":"7925e16bcacc89f4484fb6fe47e54d6420af732e"},"cell_type":"code","source":"# 위에 train_datagen과는 다르게 rescale만 해줌. (검증하는 거니까!)\n# rescale 하는 이유: 정규화 과정임. image가 0~255까지 값을 가지는 2차원 배열인데, 0~255 사이의 값을\n#                   0.0과 1.0사이의 값으로 바꾸기 위함이다.\n#                   활성화함수 및 오류역전파 알고리즘은 0.0과 1.0사이의 값을 좋아하기 때문이다.\nvalidation_datagen = ImageDataGenerator(rescale=1./255)\n\n# 위에 있는 train_generator와 같다\nvalidation_generator = validation_datagen.flow_from_dataframe(\n    validate_df, \n    \"../input/dogs-vs-cats/train/train/\", \n    x_col='filename',\n    y_col='category',\n    target_size=IMAGE_SIZE,\n    class_mode='categorical',\n    batch_size=batch_size\n)\n\n# 25000개 중에 20%는 5000개","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6e17fc1f002fedd60febb78fee5e81770640b909"},"cell_type":"markdown","source":"# See how our generator work"},{"metadata":{"trusted":true,"_uuid":"4252cce168ab65f88e44a8ebc2672607bc852af4"},"cell_type":"code","source":"example_df = train_df.sample(n=1).reset_index(drop=True) # train set인 train_df에서 1개를 sample함\n\n# 1개만 가지고 example_generator를 만듦\nexample_generator = train_datagen.flow_from_dataframe(\n    example_df, \n    \"../input/dogs-vs-cats/train/train/\", \n    x_col='filename',\n    y_col='category',\n    target_size=IMAGE_SIZE,\n    class_mode='categorical'\n)\n\n# 1개만 샘플했으므로 1개의 class에만 속함","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"example_df # 뭐가 뽑혔는지 봤어요.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"23d923dba747f8b47dc75569244cecc6f70df321"},"cell_type":"code","source":"plt.figure(figsize=(12, 12)) # plot 출력 크기\nfor i in range(0, 15):\n    plt.subplot(5, 3, i+1) # 5행 3열로 맞춤 i+1은 위치를 뜻함\n    for X_batch, Y_batch in example_generator:\n        image = X_batch[0]\n        plt.imshow(image)\n        break\nplt.tight_layout()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_batch.shape # 128행 128열 channel:3인 3차원 데이터","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_batch[0] # 0번째 data 전체를 뜻함 -> 128행 128열 3channel형태의 1개의 data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_batch[0,1] # 0번째 데이터의 1번째 행","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_batch # data가 1개입니다.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(Y_batch)\nprint(Y_batch.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"810ddf1373d9db470ed48da4f30ca5a6c1274435"},"cell_type":"markdown","source":"Seem to be nice "},{"metadata":{"_uuid":"5cd8df64e794ed17de326b613a9819e7da977a0e"},"cell_type":"markdown","source":"# Fit Model"},{"metadata":{"trusted":true,"_uuid":"0836a4cc8aa0abf603e0f96573c0c4ff383ad56b"},"cell_type":"code","source":"epochs=3 if FAST_RUN else 3 # FAST_RUN은 mode 같은데 구글링해도 잘 안나오네요. else 뒤에 숫자를 바꾸는대로 Epoch가 변하는 건 확인했어요\n                            # 위에서 False로 값을 지정했어요.\nhistory = model.fit_generator( # keras에서는 모델을 학습시킬 때 주로 fit 함수를 사용하지만 generator로\n                               # 생성된 batch로 학습시킬 경우에는 fit_generator() 함수를 사용\n    train_generator, # 훈련 dataset을 제공할 generator를 지정. 앞서 생성한 train_generator로 지정.\n    epochs=epochs,   # 전체 훈련 dataset에 대해 학습 반복 횟수를 지정.\n    validation_data=validation_generator, # validation_data에 검증 dataset을 제공한 generator를 지정.\n    validation_steps=total_validate//batch_size, # validation_steps: 한 epoch 종료 시 마다 검증할 때 사용되는 검증 스텝 수를 지정.\n                                                 # 위에서 total_validate는 val의 data 수.\n    \n    steps_per_epoch=total_train//batch_size,     # steps_per_epoch: 한 epoch에 사용한 step수 // step???\n                                                 # total_train은 train의 data 수.\n    \n    callbacks=callbacks                          # 위에서 지정한 callbacks함수 불러옴\n)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"aa1fbc4081ae0de2993188b2bf658a0be5bc0687"},"cell_type":"markdown","source":"# Save Model"},{"metadata":{"trusted":true,"_uuid":"67575a4decdaf79a915d23151626b784ffa82642"},"cell_type":"code","source":"# 한번 training을 할 때 대용량 데이터를 트레이닝 한 뒤 model을 save하지 않으면 다시 처음부터\n# 트레이닝을 진행해야한다.\nmodel.save_weights(\"model.h5\") # weight를 h5 파일 포맷으로 만들어 저장하기\n                               # keras에서는 모델과 weights의 재사용을 위해 이를 파일형태로 저장하는 라이브러리를 제공하며,\n                               # 이를 통해 모델과 weights를 파일 형태로 저장하고 불러올 수가 있다.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1b76c0a9040bc0babf0a453e567e41e22f8a1e0e"},"cell_type":"markdown","source":"# Virtualize Training"},{"metadata":{"trusted":true,"_uuid":"79055f2dc3e2abb47bea758e0464c86ca42ab431"},"cell_type":"code","source":"fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 12)) # 양쪽에 그래프를 출력 하겠다. 2행 1열로 하고 사이즈 조정.\nax1.plot(history.history['loss'], color='b', label=\"Training loss\")\nax1.plot(history.history['val_loss'], color='r', label=\"validation loss\")\nax1.set_xticks(np.arange(1, epochs, 1))\nax1.set_yticks(np.arange(0, 1, 0.1))\n\nax2.plot(history.history['acc'], color='b', label=\"Training accuracy\")\nax2.plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\nax2.set_xticks(np.arange(1, epochs, 1))\n\nlegend = plt.legend(loc='best', shadow=True)\nplt.tight_layout()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"764dc66e4b2bc558f3a0f90b80bb802f5b3d45a8"},"cell_type":"markdown","source":"# Prepare Testing Data"},{"metadata":{"trusted":true,"_uuid":"c35e70d3e1e4834dbbf840fa0ea08c049bfcd915"},"cell_type":"code","source":"test_filenames = os.listdir(\"../input/dogs-vs-cats/test/test\") # test에 있는 list들을 가져옴\ntest_df = pd.DataFrame({                                       # 데이터프레임을 생성\n    'filename': test_filenames                                 # filename이라는 col에 test_filenames값을 가져옴\n})\nnb_samples = test_df.shape[0] # test dataset data 갯수","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"291bc3996dce8d05e174b27d64f03996d3e8038e"},"cell_type":"markdown","source":"# Create Testing Generator"},{"metadata":{"trusted":true,"_uuid":"52249ec1c35fb1be3adef386be245de3794e55aa"},"cell_type":"code","source":"# rescale만 해줌. (검증하는 거니까!)\n# rescale 하는 이유: 정규화 과정임. image가 0~255까지 값을 가지는 2차원 배열인데, 0~255 사이의 값을\n#                   0.0과 1.0사이의 값으로 바꾸기 위함이다.\n#                   활성화함수 및 오류역전파 알고리즘은 0.0과 1.0사이의 값을 좋아하기 때문이다.\ntest_gen = ImageDataGenerator(rescale=1./255)\n\ntest_generator = test_gen.flow_from_dataframe(\n    test_df, \n    \"../input/dogs-vs-cats/test/test/\", \n    x_col='filename',\n    y_col=None,\n    class_mode=None,\n    target_size=IMAGE_SIZE,\n    batch_size=batch_size,\n    shuffle=False\n)\n\n# shuffle을 쓰지 않음","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2fa580afca2931ec5ce374e732d8c1789d03f2ed"},"cell_type":"markdown","source":"# Predict"},{"metadata":{"trusted":true,"_uuid":"4782eb23fa7d003f0e2415d995894017edb2d896"},"cell_type":"code","source":"predict = model.predict_generator(test_generator, steps=np.ceil(nb_samples/batch_size))\n# test_generator 자리 : 입력 샘플의 batch를 생성하는 생성기\n# steps : 중지되기 전까지 generator로부터 얻는 단계의 총 갯수 (샘플의 batch) , np.ceil로 '올림'함\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"For categoral classication the prediction will come with probability of each category. So we will pick the category that have the highest probability with numpy average max"},{"metadata":{"trusted":true},"cell_type":"code","source":"predict","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"np.argmax(predict, axis=-1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['category'] = np.argmax(predict, axis=-1) # axis에 해당하는 값들 중 가장 큰 값의 인덱스들을 반환하는 함수","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['category']","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"We will convert the predict category back into our generator classes by using `train_generator.class_indices`. It is the classes that image generator map while converting data into computer vision"},{"metadata":{"trusted":true},"cell_type":"code","source":"dict((v,k) for k,v in train_generator.class_indices.items())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"label_map = dict((v,k) for k,v in train_generator.class_indices.items())\ntest_df['category'] = test_df['category'].replace(label_map) # test_df['category'] 값을 0 or 1을 cat or dog로 바꿈","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"From our prepare data part. We map data with `{1: 'dog', 0: 'cat'}`. Now we will map the result back to dog is 1 and cat is 0"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['category'] = test_df['category'].replace({ 'dog': 1, 'cat': 0 })","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b00add65fe765529e637c3a9904d710bb7eff1d8"},"cell_type":"markdown","source":"### Virtaulize Result"},{"metadata":{"trusted":true,"_uuid":"d0bf6dd5ff344092fa0121f70bdd60fa5a40e29c"},"cell_type":"code","source":"test_df['category'].value_counts().plot.bar()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ce72a83f80d6e012b12b82c8ee3365d671a3b307"},"cell_type":"markdown","source":"### See predicted result with images"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.head(18)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"98b41dc83075e6297137fb45bf703c313dd4ae28"},"cell_type":"code","source":"sample_test = test_df.head(18)\nsample_test.head()\nplt.figure(figsize=(12, 24))\nfor index, row in sample_test.iterrows(): #iterrows row별로 반환해서 처리\n    filename = row['filename']\n    category = row['category']\n    img = load_img(\"../input/dogs-vs-cats/test/test/\"+filename, target_size=IMAGE_SIZE)\n    plt.subplot(6, 3, index+1)\n    plt.imshow(img)\n    plt.xlabel(filename + '(' + \"{}\".format(category) + ')' )\nplt.tight_layout()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d1ca25943e73aa20a37f9fb8670ee430caeaaf1f"},"cell_type":"markdown","source":"# Submission"},{"metadata":{"trusted":true,"_uuid":"cce9f3e2ffff0693d79d84590ed71fbbca7c3c7c"},"cell_type":"code","source":"submission_df = test_df.copy()\nsubmission_df['id'] = submission_df['filename'].str.split('.').str[0]\nsubmission_df['label'] = submission_df['category']\nsubmission_df.drop(['filename', 'category'], axis=1, inplace=True)\nsubmission_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":4}