Mobilenet를 차용하여 fine tuning 한 형태의 CNN 구현실습

2019-07-09

.

Deep_Learing_TIL(20190720)

study program : https://www.fastcampus.co.kr/data_camp_deeplearning

개요

치킨이미지를 브랜드별로 분류할 수 있는 CNN(Mobilenet를 차용하여 fine tuning 한 형태) 모델 구현

(실습환경 : Google Colab)

목차

step 1) prepare dataset

step 2) train and val data split

step 3) Mobilenet을 차용하여 fine tuning 한 모델 구현

step 1) prepare dataset

from google.colab import drive
import os
if not os.path.exists('/content/gdrive'):
    drive.mount('/content/gdrive')
cd '/content/gdrive/My Drive/TensorFlow_Training_13th'
/content/gdrive/My Drive/TensorFlow_Training_13th
ls
 0_1.Colab_Env_Setup.pdf
 0_1.GoogleDriveMount_GitClone.ipynb
 1_1.python_numpy_basic.ipynb
 1_2.TensorFlow_Basics_1.x.ipynb
 1_2.TensorFlow_Basics_2.0.ipynb
 1_Tensorflow_intro.pdf
 2_1.Linear_Regression_Simple.ipynb
 2_1.Linear_Regression_Simple_Keras.ipynb
 2_2.Linear_Regression_from_Text.ipynb
 2_3.Linear_Regression_from_Text_minibatch.ipynb
 2_4.Linear_Regression_from_Text_using_Dataset.ipynb
 2_5.Logistic_regression.ipynb
 3_1.mnist_logistic_regression.ipynb
 3_2.mnist_mlp.ipynb
 3_3.mnist_mlp_deeper.ipynb
 3_4.mnist_mlp_dropout.ipynb
 3_5.mnist_mlp_l2_reg.ipynb
 3_6.mnist_mlp_batchnorm.ipynb
 3_7.mnist_mlp_learning_rate_decay.ipynb
 4_1_1.load_saved_models.ipynb
 4_1.mnist_cnn_sequential.ipynb
 4_2.mnist_cnn_functional.ipynb
 4_3.mnist_cnn_subclassing.ipynb
 4_4.mnist_cnn_keras_only.ipynb
 5_1.simple_cnn_cifar10.ipynb
 5_2.mobilenet_cifar10.ipynb
 6_0.prepare_dataset.ipynb
 6_1.train_val_split.ipynb
 6_2.CNN_keras_custom_data.ipynb
 6_3.CNN_finetuning_keras_custom_data.ipynb
 6_4.make_tfrecord.ipynb
 6_5.CNN_tfrecord.ipynb
 6_6.CNN_keras_tfrecord.ipynb
'99_1.Weight Initialization.ipynb'
 chicken.zip
 data/
 README.md
!unzip chicken.zip -d ./chicken
Archive:  chicken.zip
  inflating: ./chicken/BBQ/105.png   
  inflating: ./chicken/BBQ/108.png   
  inflating: ./chicken/BBQ/11.png    
  inflating: ./chicken/BBQ/116.png   
  inflating: ./chicken/BBQ/119.png   
  inflating: ./chicken/BBQ/12.png    
  inflating: ./chicken/BBQ/125.png   
  inflating: ./chicken/BBQ/143.png   
  inflating: ./chicken/BBQ/151.png   
  inflating: ./chicken/BBQ/154.png   
  inflating: ./chicken/BBQ/158.png   
  inflating: ./chicken/BBQ/164.png   
  inflating: ./chicken/BBQ/168.png   
  inflating: ./chicken/BBQ/172.png   
  inflating: ./chicken/BBQ/176.png   
  inflating: ./chicken/BBQ/183.png   
  inflating: ./chicken/BBQ/188.png   
  inflating: ./chicken/BBQ/190.png   
  inflating: ./chicken/BBQ/193.png   
  inflating: ./chicken/BBQ/195.png   
  inflating: ./chicken/BBQ/199.png   
  inflating: ./chicken/BBQ/20.png    
  inflating: ./chicken/BBQ/203.png   
  inflating: ./chicken/BBQ/204.png   
  inflating: ./chicken/BBQ/208.png   
  inflating: ./chicken/BBQ/21.png    
  inflating: ./chicken/BBQ/210.png   
  inflating: ./chicken/BBQ/216.png   
  inflating: ./chicken/BBQ/218.png   
  inflating: ./chicken/BBQ/219.png   
  inflating: ./chicken/BBQ/22.png    
  inflating: ./chicken/BBQ/221.png   
  inflating: ./chicken/BBQ/222.png   
  inflating: ./chicken/BBQ/228.png   
  inflating: ./chicken/BBQ/229.png   
  inflating: ./chicken/BBQ/236.png   
  inflating: ./chicken/BBQ/239.png   
  inflating: ./chicken/BBQ/240.png   
  inflating: ./chicken/BBQ/241.png   
  inflating: ./chicken/BBQ/243.png   
  inflating: ./chicken/BBQ/245.png   
  inflating: ./chicken/BBQ/249.png   
  inflating: ./chicken/BBQ/25.png    
  inflating: ./chicken/BBQ/255.png   
  inflating: ./chicken/BBQ/261.png   
  inflating: ./chicken/BBQ/267.png   
  inflating: ./chicken/BBQ/268.png   
  inflating: ./chicken/BBQ/269.png   
  inflating: ./chicken/BBQ/27.png    
  inflating: ./chicken/BBQ/270.png   
  inflating: ./chicken/BBQ/273.png   
  inflating: ./chicken/BBQ/28.png    
  inflating: ./chicken/BBQ/281.png   
  inflating: ./chicken/BBQ/282.png   
  inflating: ./chicken/BBQ/291.png   
  inflating: ./chicken/BBQ/296.png   
  inflating: ./chicken/BBQ/307.png   
  inflating: ./chicken/BBQ/308.png   
  inflating: ./chicken/BBQ/311.png   
  inflating: ./chicken/BBQ/317.png   
  inflating: ./chicken/BBQ/318.png   
  inflating: ./chicken/BBQ/319.png   
  inflating: ./chicken/BBQ/32.png    
  inflating: ./chicken/BBQ/322.png   
  inflating: ./chicken/BBQ/325.png   
  inflating: ./chicken/BBQ/336.png   
  inflating: ./chicken/BBQ/338.png   
  inflating: ./chicken/BBQ/341.png   
  inflating: ./chicken/BBQ/342.png   
  inflating: ./chicken/BBQ/343.png   
  inflating: ./chicken/BBQ/344.png   
  inflating: ./chicken/BBQ/346.png   
  inflating: ./chicken/BBQ/35.png    
  inflating: ./chicken/BBQ/352.png   
  inflating: ./chicken/BBQ/361.png   
  inflating: ./chicken/BBQ/368.png   
  inflating: ./chicken/BBQ/369.png   
  inflating: ./chicken/BBQ/370.png   
  inflating: ./chicken/BBQ/371.png   
  inflating: ./chicken/BBQ/38.png    
  inflating: ./chicken/BBQ/380.png   
  inflating: ./chicken/BBQ/381.png   
  inflating: ./chicken/BBQ/385.png   
  inflating: ./chicken/BBQ/388.png   
  inflating: ./chicken/BBQ/391.png   
  inflating: ./chicken/BBQ/393.png   
  inflating: ./chicken/BBQ/394.png   
  inflating: ./chicken/BBQ/395.png   
  inflating: ./chicken/BBQ/398.png   
  inflating: ./chicken/BBQ/399.png   
  inflating: ./chicken/BBQ/401.png   
  inflating: ./chicken/BBQ/404.png   
  inflating: ./chicken/BBQ/405.png   
  inflating: ./chicken/BBQ/41.png    
  inflating: ./chicken/BBQ/411.png   
  inflating: ./chicken/BBQ/412.png   
  inflating: ./chicken/BBQ/416.png   
  inflating: ./chicken/BBQ/42.png    
  inflating: ./chicken/BBQ/420.png   
  inflating: ./chicken/BBQ/426.png   
  inflating: ./chicken/BBQ/427.png   
  inflating: ./chicken/BBQ/429.png   
  inflating: ./chicken/BBQ/431.png   
  inflating: ./chicken/BBQ/433.png   
  inflating: ./chicken/BBQ/440.png   
  inflating: ./chicken/BBQ/441.png   
  inflating: ./chicken/BBQ/445.png   
  inflating: ./chicken/BBQ/447.png   
  inflating: ./chicken/BBQ/448.png   
  inflating: ./chicken/BBQ/450.png   
  inflating: ./chicken/BBQ/452.png   
  inflating: ./chicken/BBQ/453.png   
  inflating: ./chicken/BBQ/458.png   
  inflating: ./chicken/BBQ/462.png   
  inflating: ./chicken/BBQ/467.png   
  inflating: ./chicken/BBQ/468.png   
  inflating: ./chicken/BBQ/478.png   
  inflating: ./chicken/BBQ/479.png   
  inflating: ./chicken/BBQ/482.png   
  inflating: ./chicken/BBQ/483.png   
  inflating: ./chicken/BBQ/484.png   
  inflating: ./chicken/BBQ/485.png   
  inflating: ./chicken/BBQ/486.png   
  inflating: ./chicken/BBQ/489.png   
  inflating: ./chicken/BBQ/491.png   
  inflating: ./chicken/BBQ/492.png   
  inflating: ./chicken/BBQ/493.png   
  inflating: ./chicken/BBQ/494.png   
  inflating: ./chicken/BBQ/496.png   
  inflating: ./chicken/BBQ/497.png   
  inflating: ./chicken/BBQ/499.png   
  inflating: ./chicken/BBQ/50.png    
  inflating: ./chicken/BBQ/500.png   
  inflating: ./chicken/BBQ/504.png   
  inflating: ./chicken/BBQ/505.png   
  inflating: ./chicken/BBQ/513.png   
  inflating: ./chicken/BBQ/514.png   
  inflating: ./chicken/BBQ/515.png   
  inflating: ./chicken/BBQ/519.png   
  inflating: ./chicken/BBQ/520.png   
  inflating: ./chicken/BBQ/521.png   
  inflating: ./chicken/BBQ/522.png   
  inflating: ./chicken/BBQ/525.png   
  inflating: ./chicken/BBQ/526.png   
  inflating: ./chicken/BBQ/528.png   
  inflating: ./chicken/BBQ/529.png   
  inflating: ./chicken/BBQ/530.png   
  inflating: ./chicken/BBQ/532.png   
  inflating: ./chicken/BBQ/534.png   
  inflating: ./chicken/BBQ/537.png   
  inflating: ./chicken/BBQ/539.png   
  inflating: ./chicken/BBQ/540.png   
  inflating: ./chicken/BBQ/541.png   
  inflating: ./chicken/BBQ/548.png   
  inflating: ./chicken/BBQ/55.png    
  inflating: ./chicken/BBQ/551.png   
  inflating: ./chicken/BBQ/553.png   
  inflating: ./chicken/BBQ/557.png   
  inflating: ./chicken/BBQ/558.png   
  inflating: ./chicken/BBQ/56.png    
  inflating: ./chicken/BBQ/560.png   
  inflating: ./chicken/BBQ/569.png   
  inflating: ./chicken/BBQ/570.png   
  inflating: ./chicken/BBQ/571.png   
  inflating: ./chicken/BBQ/572.png   
  inflating: ./chicken/BBQ/573.png   
  inflating: ./chicken/BBQ/574.png   
  inflating: ./chicken/BBQ/576.png   
  inflating: ./chicken/BBQ/578.png   
  inflating: ./chicken/BBQ/580.png   
  inflating: ./chicken/BBQ/582.png   
  inflating: ./chicken/BBQ/583.png   
  inflating: ./chicken/BBQ/585.png   
  inflating: ./chicken/BBQ/586.png   
  inflating: ./chicken/BBQ/587.png   
  inflating: ./chicken/BBQ/589.png   
  inflating: ./chicken/BBQ/590.png   
  inflating: ./chicken/BBQ/594.png   
  inflating: ./chicken/BBQ/598.png   
  inflating: ./chicken/BBQ/62.png    
  inflating: ./chicken/BBQ/65.png    
  inflating: ./chicken/BBQ/66.png    
  inflating: ./chicken/BBQ/67.png    
  inflating: ./chicken/BBQ/68.png    
  inflating: ./chicken/BBQ/73.png    
  inflating: ./chicken/BBQ/84.png    
  inflating: ./chicken/BBQ/91.png    
  inflating: ./chicken/BBQ/92.png    
  inflating: ./chicken/BBQ/97.png    
  inflating: ./chicken/BHC/100.png   
  inflating: ./chicken/BHC/102.png   
  inflating: ./chicken/BHC/106.png   
  inflating: ./chicken/BHC/107.png   
  inflating: ./chicken/BHC/113.png   
  inflating: ./chicken/BHC/116.png   
  inflating: ./chicken/BHC/118.png   
  inflating: ./chicken/BHC/119.png   
  inflating: ./chicken/BHC/120.png   
  inflating: ./chicken/BHC/12312.png  
  inflating: ./chicken/BHC/1231223.png  
  inflating: ./chicken/BHC/123131.png  
  inflating: ./chicken/BHC/123132.png  
  inflating: ./chicken/BHC/125.png   
  inflating: ./chicken/BHC/126.png   
  inflating: ./chicken/BHC/127.png   
  inflating: ./chicken/BHC/130.png   
  inflating: ./chicken/BHC/1321.png  
  inflating: ./chicken/BHC/134.png   
  inflating: ./chicken/BHC/136.png   
  inflating: ./chicken/BHC/137.png   
  inflating: ./chicken/BHC/141.png   
  inflating: ./chicken/BHC/1414124.png  
  inflating: ./chicken/BHC/146.png   
  inflating: ./chicken/BHC/147.png   
  inflating: ./chicken/BHC/153.png   
  inflating: ./chicken/BHC/156.png   
  inflating: ./chicken/BHC/16.png    
  inflating: ./chicken/BHC/160.png   
  inflating: ./chicken/BHC/162.png   
  inflating: ./chicken/BHC/163.png   
  inflating: ./chicken/BHC/165.png   
  inflating: ./chicken/BHC/168.png   
  inflating: ./chicken/BHC/171.png   
  inflating: ./chicken/BHC/172.png   
  inflating: ./chicken/BHC/173.png   
  inflating: ./chicken/BHC/174.png   
  inflating: ./chicken/BHC/176.png   
  inflating: ./chicken/BHC/180.png   
  inflating: ./chicken/BHC/185.png   
  inflating: ./chicken/BHC/186.png   
  inflating: ./chicken/BHC/187.png   
  inflating: ./chicken/BHC/190.png   
  inflating: ./chicken/BHC/191.png   
  inflating: ./chicken/BHC/193.png   
  inflating: ./chicken/BHC/203.png   
  inflating: ./chicken/BHC/205.png   
  inflating: ./chicken/BHC/206.png   
  inflating: ./chicken/BHC/208.png   
  inflating: ./chicken/BHC/212.png   
  inflating: ./chicken/BHC/213.png   
  inflating: ./chicken/BHC/226.png   
  inflating: ./chicken/BHC/227.png   
  inflating: ./chicken/BHC/230.png   
  inflating: ./chicken/BHC/231.png   
  inflating: ./chicken/BHC/233.png   
  inflating: ./chicken/BHC/2340.png  
  inflating: ./chicken/BHC/2342.png  
  inflating: ./chicken/BHC/234234.png  
  inflating: ./chicken/BHC/2342342.png  
  inflating: ./chicken/BHC/23424.png  
  inflating: ./chicken/BHC/234243.png  
  inflating: ./chicken/BHC/2343.png  
  inflating: ./chicken/BHC/23434.png  
  inflating: ./chicken/BHC/238.png   
  inflating: ./chicken/BHC/23894823.png  
  inflating: ./chicken/BHC/241.png   
  inflating: ./chicken/BHC/244.png   
  inflating: ./chicken/BHC/246.png   
  inflating: ./chicken/BHC/247.png   
  inflating: ./chicken/BHC/248.png   
  inflating: ./chicken/BHC/249.png   
  inflating: ./chicken/BHC/2523.png  
  inflating: ./chicken/BHC/254.png   
  inflating: ./chicken/BHC/25522.png  
  inflating: ./chicken/BHC/258.png   
  inflating: ./chicken/BHC/271.png   
  inflating: ./chicken/BHC/302.png   
  inflating: ./chicken/BHC/308.png   
  inflating: ./chicken/BHC/31.png    
  inflating: ./chicken/BHC/3248230.png  
  inflating: ./chicken/BHC/3282394.png  
  inflating: ./chicken/BHC/329.png   
  inflating: ./chicken/BHC/331.png   
  inflating: ./chicken/BHC/333.png   
  inflating: ./chicken/BHC/334.png   
  inflating: ./chicken/BHC/336.png   
  inflating: ./chicken/BHC/341.png   
  inflating: ./chicken/BHC/342.png   
  inflating: ./chicken/BHC/3453.png  
  inflating: ./chicken/BHC/34534.png  
  inflating: ./chicken/BHC/34535.png  
  inflating: ./chicken/BHC/365.png   
  inflating: ./chicken/BHC/368.png   
  inflating: ./chicken/BHC/371.png   
  inflating: ./chicken/BHC/377.png   
  inflating: ./chicken/BHC/382.png   
  inflating: ./chicken/BHC/385.png   
  inflating: ./chicken/BHC/390.png   
  inflating: ./chicken/BHC/391.png   
  inflating: ./chicken/BHC/396.png   
  inflating: ./chicken/BHC/407.png   
  inflating: ./chicken/BHC/409.png   
  inflating: ./chicken/BHC/423.png   
  inflating: ./chicken/BHC/424.png   
  inflating: ./chicken/BHC/427.png   
  inflating: ./chicken/BHC/428.png   
  inflating: ./chicken/BHC/432.png   
  inflating: ./chicken/BHC/43243223.png  
  inflating: ./chicken/BHC/43553.png  
  inflating: ./chicken/BHC/438.png   
  inflating: ./chicken/BHC/439.png   
  inflating: ./chicken/BHC/446.png   
  inflating: ./chicken/BHC/448.png   
  inflating: ./chicken/BHC/4564.png  
  inflating: ./chicken/BHC/460.png   
  inflating: ./chicken/BHC/461.png   
  inflating: ./chicken/BHC/462.png   
  inflating: ./chicken/BHC/46334.png  
  inflating: ./chicken/BHC/466.png   
  inflating: ./chicken/BHC/467.png   
  inflating: ./chicken/BHC/468.png   
  inflating: ./chicken/BHC/474.png   
  inflating: ./chicken/BHC/475.png   
  inflating: ./chicken/BHC/479.png   
  inflating: ./chicken/BHC/481.png   
  inflating: ./chicken/BHC/489.png   
  inflating: ./chicken/BHC/493.png   
  inflating: ./chicken/BHC/494.png   
  inflating: ./chicken/BHC/501.png   
  inflating: ./chicken/BHC/502.png   
  inflating: ./chicken/BHC/503.png   
  inflating: ./chicken/BHC/504.png   
  inflating: ./chicken/BHC/50404.png  
  inflating: ./chicken/BHC/505.png   
  inflating: ./chicken/BHC/506.png   
  inflating: ./chicken/BHC/5232.png  
  inflating: ./chicken/BHC/52552.png  
  inflating: ./chicken/BHC/5302.png  
  inflating: ./chicken/BHC/54.png    
  inflating: ./chicken/BHC/5464645.png  
  inflating: ./chicken/BHC/5645654.png  
  inflating: ./chicken/BHC/56464.png  
  inflating: ./chicken/BHC/6.png     
  inflating: ./chicken/BHC/6456464.png  
  inflating: ./chicken/BHC/6456465.png  
  inflating: ./chicken/BHC/65.png    
  inflating: ./chicken/BHC/65648.png  
  inflating: ./chicken/BHC/67867.png  
  inflating: ./chicken/BHC/71.png    
  inflating: ./chicken/BHC/73.png    
  inflating: ./chicken/BHC/767.png   
  inflating: ./chicken/BHC/80.png    
  inflating: ./chicken/BHC/86786.png  
  inflating: ./chicken/BHC/86788.png  
  inflating: ./chicken/BHC/90.png    
  inflating: ./chicken/BHC/978978.png  
  inflating: ./chicken/goobne/100.png  
  inflating: ./chicken/goobne/103.png  
  inflating: ./chicken/goobne/105.png  
  inflating: ./chicken/goobne/106.png  
  inflating: ./chicken/goobne/109.png  
  inflating: ./chicken/goobne/110.png  
  inflating: ./chicken/goobne/113.png  
  inflating: ./chicken/goobne/12.png  
  inflating: ./chicken/goobne/128.png  
  inflating: ./chicken/goobne/129.png  
  inflating: ./chicken/goobne/13.png  
  inflating: ./chicken/goobne/130.png  
  inflating: ./chicken/goobne/131.png  
  inflating: ./chicken/goobne/135.png  
  inflating: ./chicken/goobne/141.png  
  inflating: ./chicken/goobne/144.png  
  inflating: ./chicken/goobne/148.png  
  inflating: ./chicken/goobne/15.png  
  inflating: ./chicken/goobne/150.png  
  inflating: ./chicken/goobne/156.png  
  inflating: ./chicken/goobne/157.png  
  inflating: ./chicken/goobne/158.png  
  inflating: ./chicken/goobne/159.png  
  inflating: ./chicken/goobne/16.png  
  inflating: ./chicken/goobne/160.png  
  inflating: ./chicken/goobne/164.png  
  inflating: ./chicken/goobne/168.png  
  inflating: ./chicken/goobne/17.png  
  inflating: ./chicken/goobne/170.png  
  inflating: ./chicken/goobne/173.png  
  inflating: ./chicken/goobne/179.png  
  inflating: ./chicken/goobne/18.png  
  inflating: ./chicken/goobne/181.png  
  inflating: ./chicken/goobne/183.png  
  inflating: ./chicken/goobne/184.png  
  inflating: ./chicken/goobne/185.png  
  inflating: ./chicken/goobne/186.png  
  inflating: ./chicken/goobne/189.png  
  inflating: ./chicken/goobne/190.png  
  inflating: ./chicken/goobne/196.png  
  inflating: ./chicken/goobne/197.png  
  inflating: ./chicken/goobne/199.png  
  inflating: ./chicken/goobne/202.png  
  inflating: ./chicken/goobne/204.png  
  inflating: ./chicken/goobne/206.png  
  inflating: ./chicken/goobne/210.png  
  inflating: ./chicken/goobne/212.png  
  inflating: ./chicken/goobne/215.png  
  inflating: ./chicken/goobne/216.png  
  inflating: ./chicken/goobne/217.png  
  inflating: ./chicken/goobne/218.png  
  inflating: ./chicken/goobne/220.png  
  inflating: ./chicken/goobne/221.png  
  inflating: ./chicken/goobne/222.png  
  inflating: ./chicken/goobne/224.png  
  inflating: ./chicken/goobne/225.png  
  inflating: ./chicken/goobne/227.png  
  inflating: ./chicken/goobne/228.png  
  inflating: ./chicken/goobne/230.png  
  inflating: ./chicken/goobne/231.png  
  inflating: ./chicken/goobne/233.png  
  inflating: ./chicken/goobne/234.png  
  inflating: ./chicken/goobne/236.png  
  inflating: ./chicken/goobne/237.png  
  inflating: ./chicken/goobne/246.png  
  inflating: ./chicken/goobne/247.png  
  inflating: ./chicken/goobne/250.png  
  inflating: ./chicken/goobne/251.png  
  inflating: ./chicken/goobne/253.png  
  inflating: ./chicken/goobne/254.png  
  inflating: ./chicken/goobne/255.png  
  inflating: ./chicken/goobne/256.png  
  inflating: ./chicken/goobne/258.png  
  inflating: ./chicken/goobne/259.png  
  inflating: ./chicken/goobne/26.png  
  inflating: ./chicken/goobne/260.png  
  inflating: ./chicken/goobne/261.png  
  inflating: ./chicken/goobne/270.png  
  inflating: ./chicken/goobne/274.png  
  inflating: ./chicken/goobne/275.png  
  inflating: ./chicken/goobne/277.png  
  inflating: ./chicken/goobne/278.png  
  inflating: ./chicken/goobne/280.png  
  inflating: ./chicken/goobne/282.png  
  inflating: ./chicken/goobne/283.png  
  inflating: ./chicken/goobne/288.png  
  inflating: ./chicken/goobne/289.png  
  inflating: ./chicken/goobne/290.png  
  inflating: ./chicken/goobne/292.png  
  inflating: ./chicken/goobne/296.png  
  inflating: ./chicken/goobne/297.png  
  inflating: ./chicken/goobne/301.png  
  inflating: ./chicken/goobne/305.png  
  inflating: ./chicken/goobne/308.png  
  inflating: ./chicken/goobne/310.png  
  inflating: ./chicken/goobne/312.png  
  inflating: ./chicken/goobne/314.png  
  inflating: ./chicken/goobne/316.png  
  inflating: ./chicken/goobne/318.png  
  inflating: ./chicken/goobne/319.png  
  inflating: ./chicken/goobne/33.png  
  inflating: ./chicken/goobne/330.png  
  inflating: ./chicken/goobne/332.png  
  inflating: ./chicken/goobne/333.png  
  inflating: ./chicken/goobne/334.png  
  inflating: ./chicken/goobne/335.png  
  inflating: ./chicken/goobne/34.png  
  inflating: ./chicken/goobne/340.png  
  inflating: ./chicken/goobne/351.png  
  inflating: ./chicken/goobne/352.png  
  inflating: ./chicken/goobne/356.png  
  inflating: ./chicken/goobne/357.png  
  inflating: ./chicken/goobne/359.png  
  inflating: ./chicken/goobne/361.png  
  inflating: ./chicken/goobne/362.png  
  inflating: ./chicken/goobne/366.png  
  inflating: ./chicken/goobne/369.png  
  inflating: ./chicken/goobne/370.png  
  inflating: ./chicken/goobne/371.png  
  inflating: ./chicken/goobne/372.png  
  inflating: ./chicken/goobne/375.png  
  inflating: ./chicken/goobne/376.png  
  inflating: ./chicken/goobne/381.png  
  inflating: ./chicken/goobne/383.png  
  inflating: ./chicken/goobne/384.png  
  inflating: ./chicken/goobne/388.png  
  inflating: ./chicken/goobne/39.png  
  inflating: ./chicken/goobne/391.png  
  inflating: ./chicken/goobne/392.png  
  inflating: ./chicken/goobne/40.png  
  inflating: ./chicken/goobne/405.png  
  inflating: ./chicken/goobne/406.png  
  inflating: ./chicken/goobne/407.png  
  inflating: ./chicken/goobne/408.png  
  inflating: ./chicken/goobne/414.png  
  inflating: ./chicken/goobne/419.png  
  inflating: ./chicken/goobne/42.png  
  inflating: ./chicken/goobne/421.png  
  inflating: ./chicken/goobne/423.png  
  inflating: ./chicken/goobne/43.png  
  inflating: ./chicken/goobne/432.png  
  inflating: ./chicken/goobne/435.png  
  inflating: ./chicken/goobne/437.png  
  inflating: ./chicken/goobne/441.png  
  inflating: ./chicken/goobne/443.png  
  inflating: ./chicken/goobne/445.png  
  inflating: ./chicken/goobne/449.png  
  inflating: ./chicken/goobne/452.png  
  inflating: ./chicken/goobne/454.png  
  inflating: ./chicken/goobne/459.png  
  inflating: ./chicken/goobne/460.png  
  inflating: ./chicken/goobne/462.png  
  inflating: ./chicken/goobne/464.png  
  inflating: ./chicken/goobne/465.png  
  inflating: ./chicken/goobne/467.png  
  inflating: ./chicken/goobne/478.png  
  inflating: ./chicken/goobne/480.png  
  inflating: ./chicken/goobne/481.png  
  inflating: ./chicken/goobne/483.png  
  inflating: ./chicken/goobne/486.png  
  inflating: ./chicken/goobne/487.png  
  inflating: ./chicken/goobne/491.png  
  inflating: ./chicken/goobne/52.png  
  inflating: ./chicken/goobne/54.png  
  inflating: ./chicken/goobne/55.png  
  inflating: ./chicken/goobne/57.png  
  inflating: ./chicken/goobne/59.png  
  inflating: ./chicken/goobne/6.png  
  inflating: ./chicken/goobne/62.png  
  inflating: ./chicken/goobne/63.png  
  inflating: ./chicken/goobne/67.png  
  inflating: ./chicken/goobne/81.png  
  inflating: ./chicken/goobne/89.png  
  inflating: ./chicken/goobne/9.png  
  inflating: ./chicken/goobne/91.png  
  inflating: ./chicken/goobne/93.png  
  inflating: ./chicken/goobne/95.png  
  inflating: ./chicken/goobne/98.png  
  inflating: ./chicken/kyochon/1.png  
  inflating: ./chicken/kyochon/10.png  
  inflating: ./chicken/kyochon/104.png  
  inflating: ./chicken/kyochon/105.png  
  inflating: ./chicken/kyochon/113.png  
  inflating: ./chicken/kyochon/114.png  
  inflating: ./chicken/kyochon/115.png  
  inflating: ./chicken/kyochon/116.png  
  inflating: ./chicken/kyochon/117.png  
  inflating: ./chicken/kyochon/123.png  
  inflating: ./chicken/kyochon/128.png  
  inflating: ./chicken/kyochon/134.png  
  inflating: ./chicken/kyochon/14.png  
  inflating: ./chicken/kyochon/143.png  
  inflating: ./chicken/kyochon/144.png  
  inflating: ./chicken/kyochon/15.png  
  inflating: ./chicken/kyochon/150.png  
  inflating: ./chicken/kyochon/152.png  
  inflating: ./chicken/kyochon/157.png  
  inflating: ./chicken/kyochon/159.png  
  inflating: ./chicken/kyochon/177.png  
  inflating: ./chicken/kyochon/179.png  
  inflating: ./chicken/kyochon/191.png  
  inflating: ./chicken/kyochon/193.png  
  inflating: ./chicken/kyochon/194.png  
  inflating: ./chicken/kyochon/195.png  
  inflating: ./chicken/kyochon/197.png  
  inflating: ./chicken/kyochon/198.png  
  inflating: ./chicken/kyochon/2.png  
  inflating: ./chicken/kyochon/200.png  
  inflating: ./chicken/kyochon/207.png  
  inflating: ./chicken/kyochon/209.png  
  inflating: ./chicken/kyochon/210.png  
  inflating: ./chicken/kyochon/211.png  
  inflating: ./chicken/kyochon/216.png  
  inflating: ./chicken/kyochon/221.png  
  inflating: ./chicken/kyochon/226.png  
  inflating: ./chicken/kyochon/227.png  
  inflating: ./chicken/kyochon/23.png  
  inflating: ./chicken/kyochon/232.png  
  inflating: ./chicken/kyochon/237.png  
  inflating: ./chicken/kyochon/238.png  
  inflating: ./chicken/kyochon/244.png  
  inflating: ./chicken/kyochon/247.png  
  inflating: ./chicken/kyochon/251.png  
  inflating: ./chicken/kyochon/255.png  
  inflating: ./chicken/kyochon/257.png  
  inflating: ./chicken/kyochon/258.png  
  inflating: ./chicken/kyochon/262.png  
  inflating: ./chicken/kyochon/272.png  
  inflating: ./chicken/kyochon/281.png  
  inflating: ./chicken/kyochon/286.png  
  inflating: ./chicken/kyochon/287.png  
  inflating: ./chicken/kyochon/29.png  
  inflating: ./chicken/kyochon/290.png  
  inflating: ./chicken/kyochon/291.png  
  inflating: ./chicken/kyochon/3.png  
  inflating: ./chicken/kyochon/30.png  
  inflating: ./chicken/kyochon/300.png  
  inflating: ./chicken/kyochon/304.png  
  inflating: ./chicken/kyochon/309.png  
  inflating: ./chicken/kyochon/311.png  
  inflating: ./chicken/kyochon/313.png  
  inflating: ./chicken/kyochon/320.png  
  inflating: ./chicken/kyochon/321.png  
  inflating: ./chicken/kyochon/326.png  
  inflating: ./chicken/kyochon/330.png  
  inflating: ./chicken/kyochon/331.png  
  inflating: ./chicken/kyochon/332.png  
  inflating: ./chicken/kyochon/337.png  
  inflating: ./chicken/kyochon/338.png  
  inflating: ./chicken/kyochon/339.png  
  inflating: ./chicken/kyochon/341.png  
  inflating: ./chicken/kyochon/342.png  
  inflating: ./chicken/kyochon/344.png  
  inflating: ./chicken/kyochon/351.png  
  inflating: ./chicken/kyochon/352.png  
  inflating: ./chicken/kyochon/353.png  
  inflating: ./chicken/kyochon/355.png  
  inflating: ./chicken/kyochon/357.png  
  inflating: ./chicken/kyochon/36.png  
  inflating: ./chicken/kyochon/372.png  
  inflating: ./chicken/kyochon/373.png  
  inflating: ./chicken/kyochon/375.png  
  inflating: ./chicken/kyochon/376.png  
  inflating: ./chicken/kyochon/377.png  
  inflating: ./chicken/kyochon/382.png  
  inflating: ./chicken/kyochon/387.png  
  inflating: ./chicken/kyochon/389.png  
  inflating: ./chicken/kyochon/390.png  
  inflating: ./chicken/kyochon/392.png  
  inflating: ./chicken/kyochon/394.png  
  inflating: ./chicken/kyochon/399.png  
  inflating: ./chicken/kyochon/4.png  
  inflating: ./chicken/kyochon/40.png  
  inflating: ./chicken/kyochon/400.png  
  inflating: ./chicken/kyochon/405.png  
  inflating: ./chicken/kyochon/406.png  
  inflating: ./chicken/kyochon/411.png  
  inflating: ./chicken/kyochon/415.png  
  inflating: ./chicken/kyochon/418.png  
  inflating: ./chicken/kyochon/425.png  
  inflating: ./chicken/kyochon/431.png  
  inflating: ./chicken/kyochon/439.png  
  inflating: ./chicken/kyochon/440.png  
  inflating: ./chicken/kyochon/442.png  
  inflating: ./chicken/kyochon/443.png  
  inflating: ./chicken/kyochon/444.png  
  inflating: ./chicken/kyochon/450.png  
  inflating: ./chicken/kyochon/454.png  
  inflating: ./chicken/kyochon/455.png  
  inflating: ./chicken/kyochon/456.png  
  inflating: ./chicken/kyochon/466.png  
  inflating: ./chicken/kyochon/471.png  
  inflating: ./chicken/kyochon/48.png  
  inflating: ./chicken/kyochon/481.png  
  inflating: ./chicken/kyochon/494.png  
  inflating: ./chicken/kyochon/495.png  
  inflating: ./chicken/kyochon/498.png  
  inflating: ./chicken/kyochon/6.png  
  inflating: ./chicken/kyochon/60.png  
  inflating: ./chicken/kyochon/604.png  
  inflating: ./chicken/kyochon/609.png  
  inflating: ./chicken/kyochon/617.png  
  inflating: ./chicken/kyochon/619.png  
  inflating: ./chicken/kyochon/627.png  
  inflating: ./chicken/kyochon/632.png  
  inflating: ./chicken/kyochon/633.png  
  inflating: ./chicken/kyochon/639.png  
  inflating: ./chicken/kyochon/640.png  
  inflating: ./chicken/kyochon/641.png  
  inflating: ./chicken/kyochon/642.png  
  inflating: ./chicken/kyochon/645.png  
  inflating: ./chicken/kyochon/648.png  
  inflating: ./chicken/kyochon/651.png  
  inflating: ./chicken/kyochon/657.png  
  inflating: ./chicken/kyochon/663.png  
  inflating: ./chicken/kyochon/664.png  
  inflating: ./chicken/kyochon/671.png  
  inflating: ./chicken/kyochon/674.png  
  inflating: ./chicken/kyochon/68.png  
  inflating: ./chicken/kyochon/69.png  
  inflating: ./chicken/kyochon/697.png  
  inflating: ./chicken/kyochon/704.png  
  inflating: ./chicken/kyochon/712.png  
  inflating: ./chicken/kyochon/714.png  
  inflating: ./chicken/kyochon/720.png  
  inflating: ./chicken/kyochon/721.png  
  inflating: ./chicken/kyochon/723.png  
  inflating: ./chicken/kyochon/724.png  
  inflating: ./chicken/kyochon/728.png  
  inflating: ./chicken/kyochon/729.png  
  inflating: ./chicken/kyochon/737.png  
  inflating: ./chicken/kyochon/739.png  
  inflating: ./chicken/kyochon/744.png  
  inflating: ./chicken/kyochon/750.png  
  inflating: ./chicken/kyochon/751.png  
  inflating: ./chicken/kyochon/757.png  
  inflating: ./chicken/kyochon/767.png  
  inflating: ./chicken/kyochon/77.png  
  inflating: ./chicken/kyochon/770.png  
  inflating: ./chicken/kyochon/771.png  
  inflating: ./chicken/kyochon/774.png  
  inflating: ./chicken/kyochon/777.png  
  inflating: ./chicken/kyochon/781.png  
  inflating: ./chicken/kyochon/782.png  
  inflating: ./chicken/kyochon/788.png  
  inflating: ./chicken/kyochon/790.png  
  inflating: ./chicken/kyochon/795.png  
  inflating: ./chicken/kyochon/80.png  
  inflating: ./chicken/kyochon/92.png  
  inflating: ./chicken/kyochon/96.png  
  inflating: ./chicken/nene/1.png    
  inflating: ./chicken/nene/10.png   
  inflating: ./chicken/nene/106.png  
  inflating: ./chicken/nene/107.png  
  inflating: ./chicken/nene/109.png  
  inflating: ./chicken/nene/11.png   
  inflating: ./chicken/nene/110.png  
  inflating: ./chicken/nene/112.png  
  inflating: ./chicken/nene/113.png  
  inflating: ./chicken/nene/114.png  
  inflating: ./chicken/nene/115.png  
  inflating: ./chicken/nene/116.png  
  inflating: ./chicken/nene/117.png  
  inflating: ./chicken/nene/118.png  
  inflating: ./chicken/nene/119.png  
  inflating: ./chicken/nene/121.png  
  inflating: ./chicken/nene/123.png  
  inflating: ./chicken/nene/130.png  
  inflating: ./chicken/nene/131.png  
  inflating: ./chicken/nene/132.png  
  inflating: ./chicken/nene/133.png  
  inflating: ./chicken/nene/134.png  
  inflating: ./chicken/nene/135.png  
  inflating: ./chicken/nene/136.png  
  inflating: ./chicken/nene/137.png  
  inflating: ./chicken/nene/138.png  
  inflating: ./chicken/nene/144.png  
  inflating: ./chicken/nene/145.png  
  inflating: ./chicken/nene/146.png  
  inflating: ./chicken/nene/149.png  
  inflating: ./chicken/nene/15.png   
  inflating: ./chicken/nene/150.png  
  inflating: ./chicken/nene/152.png  
  inflating: ./chicken/nene/155.png  
  inflating: ./chicken/nene/159.png  
  inflating: ./chicken/nene/166.png  
  inflating: ./chicken/nene/167.png  
  inflating: ./chicken/nene/168.png  
  inflating: ./chicken/nene/169.png  
  inflating: ./chicken/nene/170.png  
  inflating: ./chicken/nene/172.png  
  inflating: ./chicken/nene/173.png  
  inflating: ./chicken/nene/176.png  
  inflating: ./chicken/nene/177.png  
  inflating: ./chicken/nene/179.png  
  inflating: ./chicken/nene/181.png  
  inflating: ./chicken/nene/182.png  
  inflating: ./chicken/nene/184.png  
  inflating: ./chicken/nene/186.png  
  inflating: ./chicken/nene/188.png  
  inflating: ./chicken/nene/189.png  
  inflating: ./chicken/nene/19.png   
  inflating: ./chicken/nene/192.png  
  inflating: ./chicken/nene/194.png  
  inflating: ./chicken/nene/196.png  
  inflating: ./chicken/nene/20.png   
  inflating: ./chicken/nene/203.png  
  inflating: ./chicken/nene/204.png  
  inflating: ./chicken/nene/205.png  
  inflating: ./chicken/nene/206.png  
  inflating: ./chicken/nene/208.png  
  inflating: ./chicken/nene/209.png  
  inflating: ./chicken/nene/210.png  
  inflating: ./chicken/nene/211.png  
  inflating: ./chicken/nene/213.png  
  inflating: ./chicken/nene/218.png  
  inflating: ./chicken/nene/220.png  
  inflating: ./chicken/nene/221.png  
  inflating: ./chicken/nene/223.png  
  inflating: ./chicken/nene/224.png  
  inflating: ./chicken/nene/225.png  
  inflating: ./chicken/nene/228.png  
  inflating: ./chicken/nene/23.png   
  inflating: ./chicken/nene/231.png  
  inflating: ./chicken/nene/233.png  
  inflating: ./chicken/nene/234.png  
  inflating: ./chicken/nene/236.png  
  inflating: ./chicken/nene/241.png  
  inflating: ./chicken/nene/242.png  
  inflating: ./chicken/nene/245.png  
  inflating: ./chicken/nene/246.png  
  inflating: ./chicken/nene/247.png  
  inflating: ./chicken/nene/248.png  
  inflating: ./chicken/nene/250.png  
  inflating: ./chicken/nene/251.png  
  inflating: ./chicken/nene/253.png  
  inflating: ./chicken/nene/255.png  
  inflating: ./chicken/nene/258.png  
  inflating: ./chicken/nene/26.png   
  inflating: ./chicken/nene/261.png  
  inflating: ./chicken/nene/262.png  
  inflating: ./chicken/nene/268.png  
  inflating: ./chicken/nene/269.png  
  inflating: ./chicken/nene/272.png  
  inflating: ./chicken/nene/274.png  
  inflating: ./chicken/nene/275.png  
  inflating: ./chicken/nene/279.png  
  inflating: ./chicken/nene/28.png   
  inflating: ./chicken/nene/283.png  
  inflating: ./chicken/nene/284.png  
  inflating: ./chicken/nene/288.png  
  inflating: ./chicken/nene/289.png  
  inflating: ./chicken/nene/290.png  
  inflating: ./chicken/nene/301.png  
  inflating: ./chicken/nene/303.png  
  inflating: ./chicken/nene/305.png  
  inflating: ./chicken/nene/306.png  
  inflating: ./chicken/nene/307.png  
  inflating: ./chicken/nene/311.png  
  inflating: ./chicken/nene/315.png  
  inflating: ./chicken/nene/317.png  
  inflating: ./chicken/nene/318.png  
  inflating: ./chicken/nene/319.png  
  inflating: ./chicken/nene/320.png  
  inflating: ./chicken/nene/321.png  
  inflating: ./chicken/nene/322.png  
  inflating: ./chicken/nene/325.png  
  inflating: ./chicken/nene/327.png  
  inflating: ./chicken/nene/328.png  
  inflating: ./chicken/nene/333.png  
  inflating: ./chicken/nene/335.png  
  inflating: ./chicken/nene/336.png  
  inflating: ./chicken/nene/338.png  
  inflating: ./chicken/nene/339.png  
  inflating: ./chicken/nene/340.png  
  inflating: ./chicken/nene/341.png  
  inflating: ./chicken/nene/342.png  
  inflating: ./chicken/nene/343.png  
  inflating: ./chicken/nene/345.png  
  inflating: ./chicken/nene/347.png  
  inflating: ./chicken/nene/348.png  
  inflating: ./chicken/nene/350.png  
  inflating: ./chicken/nene/351.png  
  inflating: ./chicken/nene/353.png  
  inflating: ./chicken/nene/36.png   
  inflating: ./chicken/nene/360.png  
  inflating: ./chicken/nene/361.png  
  inflating: ./chicken/nene/362.png  
  inflating: ./chicken/nene/38.png   
  inflating: ./chicken/nene/40.png   
  inflating: ./chicken/nene/41.png   
  inflating: ./chicken/nene/45.png   
  inflating: ./chicken/nene/50.png   
  inflating: ./chicken/nene/51.png   
  inflating: ./chicken/nene/55.png   
  inflating: ./chicken/nene/56.png   
  inflating: ./chicken/nene/57.png   
  inflating: ./chicken/nene/6.png    
  inflating: ./chicken/nene/61.png   
  inflating: ./chicken/nene/62.png   
  inflating: ./chicken/nene/63.png   
  inflating: ./chicken/nene/66.png   
  inflating: ./chicken/nene/69.png   
  inflating: ./chicken/nene/71.png   
  inflating: ./chicken/nene/76.png   
  inflating: ./chicken/nene/78.png   
  inflating: ./chicken/nene/79.png   
  inflating: ./chicken/nene/81.png   
  inflating: ./chicken/nene/82.png   
  inflating: ./chicken/nene/89.png   
  inflating: ./chicken/nene/92.png   
  inflating: ./chicken/nene/94.png   
  inflating: ./chicken/nene/98.png   
  inflating: ./chicken/nene/99.png   
  inflating: ./chicken/ttobongee/108.png  
  inflating: ./chicken/ttobongee/110.png  
  inflating: ./chicken/ttobongee/113.png  
  inflating: ./chicken/ttobongee/114.png  
  inflating: ./chicken/ttobongee/117.png  
  inflating: ./chicken/ttobongee/131.png  
  inflating: ./chicken/ttobongee/137.png  
  inflating: ./chicken/ttobongee/140.png  
  inflating: ./chicken/ttobongee/143.png  
  inflating: ./chicken/ttobongee/150.png  
  inflating: ./chicken/ttobongee/153.png  
  inflating: ./chicken/ttobongee/157.png  
  inflating: ./chicken/ttobongee/158.png  
  inflating: ./chicken/ttobongee/16.png  
  inflating: ./chicken/ttobongee/160.png  
  inflating: ./chicken/ttobongee/165.png  
  inflating: ./chicken/ttobongee/168.png  
  inflating: ./chicken/ttobongee/174.png  
  inflating: ./chicken/ttobongee/187.png  
  inflating: ./chicken/ttobongee/19.png  
  inflating: ./chicken/ttobongee/192.png  
  inflating: ./chicken/ttobongee/193.png  
  inflating: ./chicken/ttobongee/195.png  
  inflating: ./chicken/ttobongee/213.png  
  inflating: ./chicken/ttobongee/215.png  
  inflating: ./chicken/ttobongee/22.png  
  inflating: ./chicken/ttobongee/229.png  
  inflating: ./chicken/ttobongee/23.png  
  inflating: ./chicken/ttobongee/238.png  
  inflating: ./chicken/ttobongee/239.png  
  inflating: ./chicken/ttobongee/249.png  
  inflating: ./chicken/ttobongee/25.png  
  inflating: ./chicken/ttobongee/250.png  
  inflating: ./chicken/ttobongee/269.png  
  inflating: ./chicken/ttobongee/272.png  
  inflating: ./chicken/ttobongee/277.png  
  inflating: ./chicken/ttobongee/278.png  
  inflating: ./chicken/ttobongee/279.png  
  inflating: ./chicken/ttobongee/282.png  
  inflating: ./chicken/ttobongee/286.png  
  inflating: ./chicken/ttobongee/287.png  
  inflating: ./chicken/ttobongee/293.png  
  inflating: ./chicken/ttobongee/294.png  
  inflating: ./chicken/ttobongee/296.png  
  inflating: ./chicken/ttobongee/305.png  
  inflating: ./chicken/ttobongee/31.png  
  inflating: ./chicken/ttobongee/311.png  
  inflating: ./chicken/ttobongee/313.png  
  inflating: ./chicken/ttobongee/32.png  
  inflating: ./chicken/ttobongee/321.png  
  inflating: ./chicken/ttobongee/324.png  
  inflating: ./chicken/ttobongee/327.png  
  inflating: ./chicken/ttobongee/328.png  
  inflating: ./chicken/ttobongee/338.png  
  inflating: ./chicken/ttobongee/339.png  
  inflating: ./chicken/ttobongee/346.png  
  inflating: ./chicken/ttobongee/347.png  
  inflating: ./chicken/ttobongee/352.png  
  inflating: ./chicken/ttobongee/359.png  
  inflating: ./chicken/ttobongee/36.png  
  inflating: ./chicken/ttobongee/360.png  
  inflating: ./chicken/ttobongee/377.png  
  inflating: ./chicken/ttobongee/389.png  
  inflating: ./chicken/ttobongee/390.png  
  inflating: ./chicken/ttobongee/392.png  
  inflating: ./chicken/ttobongee/402.png  
  inflating: ./chicken/ttobongee/403.png  
  inflating: ./chicken/ttobongee/405.png  
  inflating: ./chicken/ttobongee/407.png  
  inflating: ./chicken/ttobongee/408.png  
  inflating: ./chicken/ttobongee/409.png  
  inflating: ./chicken/ttobongee/413.png  
  inflating: ./chicken/ttobongee/421.png  
  inflating: ./chicken/ttobongee/428.png  
  inflating: ./chicken/ttobongee/432.png  
  inflating: ./chicken/ttobongee/433.png  
  inflating: ./chicken/ttobongee/442.png  
  inflating: ./chicken/ttobongee/445.png  
  inflating: ./chicken/ttobongee/447.png  
  inflating: ./chicken/ttobongee/451.png  
  inflating: ./chicken/ttobongee/456.png  
  inflating: ./chicken/ttobongee/457.png  
  inflating: ./chicken/ttobongee/46.png  
  inflating: ./chicken/ttobongee/462.png  
  inflating: ./chicken/ttobongee/464.png  
  inflating: ./chicken/ttobongee/471.png  
  inflating: ./chicken/ttobongee/482.png  
  inflating: ./chicken/ttobongee/483.png  
  inflating: ./chicken/ttobongee/484.png  
  inflating: ./chicken/ttobongee/485.png  
  inflating: ./chicken/ttobongee/490.png  
  inflating: ./chicken/ttobongee/493.png  
  inflating: ./chicken/ttobongee/495.png  
  inflating: ./chicken/ttobongee/496.png  
  inflating: ./chicken/ttobongee/499.png  
  inflating: ./chicken/ttobongee/5.png  
  inflating: ./chicken/ttobongee/506.png  
  inflating: ./chicken/ttobongee/507.png  
  inflating: ./chicken/ttobongee/512.png  
  inflating: ./chicken/ttobongee/522.png  
  inflating: ./chicken/ttobongee/523.png  
  inflating: ./chicken/ttobongee/527.png  
  inflating: ./chicken/ttobongee/53.png  
  inflating: ./chicken/ttobongee/539.png  
  inflating: ./chicken/ttobongee/543.png  
  inflating: ./chicken/ttobongee/544.png  
  inflating: ./chicken/ttobongee/549.png  
  inflating: ./chicken/ttobongee/558.png  
  inflating: ./chicken/ttobongee/559.png  
  inflating: ./chicken/ttobongee/561.png  
  inflating: ./chicken/ttobongee/568.png  
  inflating: ./chicken/ttobongee/569.png  
  inflating: ./chicken/ttobongee/585.png  
  inflating: ./chicken/ttobongee/588.png  
  inflating: ./chicken/ttobongee/590.png  
  inflating: ./chicken/ttobongee/595.png  
  inflating: ./chicken/ttobongee/599.png  
  inflating: ./chicken/ttobongee/602.png  
  inflating: ./chicken/ttobongee/603.png  
  inflating: ./chicken/ttobongee/604.png  
  inflating: ./chicken/ttobongee/606.png  
  inflating: ./chicken/ttobongee/607.png  
  inflating: ./chicken/ttobongee/609.png  
  inflating: ./chicken/ttobongee/610.png  
  inflating: ./chicken/ttobongee/614.png  
  inflating: ./chicken/ttobongee/615.png  
  inflating: ./chicken/ttobongee/627.png  
  inflating: ./chicken/ttobongee/628.png  
  inflating: ./chicken/ttobongee/631.png  
  inflating: ./chicken/ttobongee/633.png  
  inflating: ./chicken/ttobongee/638.png  
  inflating: ./chicken/ttobongee/645.png  
  inflating: ./chicken/ttobongee/649.png  
  inflating: ./chicken/ttobongee/653.png  
  inflating: ./chicken/ttobongee/654.png  
  inflating: ./chicken/ttobongee/658.png  
  inflating: ./chicken/ttobongee/66.png  
  inflating: ./chicken/ttobongee/660.png  
  inflating: ./chicken/ttobongee/664.png  
  inflating: ./chicken/ttobongee/672.png  
  inflating: ./chicken/ttobongee/678.png  
  inflating: ./chicken/ttobongee/680.png  
  inflating: ./chicken/ttobongee/69.png  
  inflating: ./chicken/ttobongee/695.png  
  inflating: ./chicken/ttobongee/696.png  
  inflating: ./chicken/ttobongee/697.png  
  inflating: ./chicken/ttobongee/698.png  
  inflating: ./chicken/ttobongee/71.png  
  inflating: ./chicken/ttobongee/76.png  
  inflating: ./chicken/ttobongee/81.png  
  inflating: ./chicken/ttobongee/95.png  
  inflating: ./chicken/ttobongee/96.png  
  inflating: ./chicken/ttobongee/97.png  
ls
 0_1.Colab_Env_Setup.pdf
 0_1.GoogleDriveMount_GitClone.ipynb
 1_1.python_numpy_basic.ipynb
 1_2.TensorFlow_Basics_1.x.ipynb
 1_2.TensorFlow_Basics_2.0.ipynb
 1_Tensorflow_intro.pdf
 2_1.Linear_Regression_Simple.ipynb
 2_1.Linear_Regression_Simple_Keras.ipynb
 2_2.Linear_Regression_from_Text.ipynb
 2_3.Linear_Regression_from_Text_minibatch.ipynb
 2_4.Linear_Regression_from_Text_using_Dataset.ipynb
 2_5.Logistic_regression.ipynb
 3_1.mnist_logistic_regression.ipynb
 3_2.mnist_mlp.ipynb
 3_3.mnist_mlp_deeper.ipynb
 3_4.mnist_mlp_dropout.ipynb
 3_5.mnist_mlp_l2_reg.ipynb
 3_6.mnist_mlp_batchnorm.ipynb
 3_7.mnist_mlp_learning_rate_decay.ipynb
 4_1_1.load_saved_models.ipynb
 4_1.mnist_cnn_sequential.ipynb
 4_2.mnist_cnn_functional.ipynb
 4_3.mnist_cnn_subclassing.ipynb
 4_4.mnist_cnn_keras_only.ipynb
 5_1.simple_cnn_cifar10.ipynb
 5_2.mobilenet_cifar10.ipynb
 6_0.prepare_dataset.ipynb
 6_1.train_val_split.ipynb
 6_2.CNN_keras_custom_data.ipynb
 6_3.CNN_finetuning_keras_custom_data.ipynb
 6_4.make_tfrecord.ipynb
 6_5.CNN_tfrecord.ipynb
 6_6.CNN_keras_tfrecord.ipynb
'99_1.Weight Initialization.ipynb'
 chicken/
 chicken.zip
 data/
 README.md
ls chicken
BBQ/  BHC/  goobne/  kyochon/  nene/  ttobongee/

step 2) train and val data split

import numpy as np
import os
import shutil
import tensorflow as tf
from sklearn.model_selection import train_test_split
from PIL import Image
cd '/content/gdrive/My Drive/TensorFlow_Training_13th'
/content/gdrive/My Drive/TensorFlow_Training_13th
cur_dir = os.getcwd()
print(cur_dir)
/content/gdrive/My Drive/TensorFlow_Training_13th
## Train Dataset이 있는 directory 경로
train_dir = os.path.join(cur_dir, 'chicken')
print("Train Dataset Directory Path : ", train_dir)

## Train directory 아래에 directory 이름과 갯수 확인(class 수)
categories = sorted([dname for dname in os.listdir(train_dir) if os.path.isdir(os.path.join(train_dir, dname))])
n_class = len(categories)
print("This dataset has {} classes".format(n_class))
print("Class names :")
print(categories)
Train Dataset Directory Path :  /content/gdrive/My Drive/TensorFlow_Training_13th/chicken
This dataset has 6 classes
Class names :
['BBQ', 'BHC', 'goobne', 'kyochon', 'nene', 'ttobongee']
## Train Dataset 중 몇 %를 Validation Dataset으로 사용할 지 비율
val_ratio = 1/5
## Validation Dataset을 저장할 direcyory 이름
val_dname = 'chicken_val'
val_dir = os.path.join(train_dir, '..', val_dname)
os.makedirs(val_dir, exist_ok=True)
print(val_dir)
/content/gdrive/My Drive/TensorFlow_Training_13th/chicken/../chicken_val
## image file 확장자
valid_exts = ['.jpg', '.png', '.jpeg', '.gif']

## 조건에 맞는 image file만 남기고 삭제
for category in categories:
    cat_dir = os.path.join(train_dir, category)
    fnames = os.listdir(cat_dir)
    
    for fname in fnames:
        ext = os.path.splitext(fname)[1]
        fpath = os.path.join(cat_dir, fname)
        ## image file이 아닐 경우 삭제
        if ext.lower() not in valid_exts:
            ## 주의!! 파일 삭제!! 
            os.remove(fpath)
            continue
        img = Image.open(fpath)
        img = np.asarray(img)        
        ## grey scale image의 경우 channel을 3으로 확장
        try:
            ch = img.shape[2]
        except:
            img = np.tile(np.expand_dims(img, axis=2), [1, 1, 3])
            ch = image.shape[2]
        ## channel이 3이 아닌 경우(channel이 4인 경우) 삭제
        if ch != 3:
            print("{} has 4 channels".format(fpath))
            ## 주의!! 파일 삭제!!
            os.remove(fpath)
            continue
    
    n_imgs = len(os.listdir(cat_dir))    
    print("{} class has {} images".format(category, n_imgs))
    
    ## Train Dataset중 일부를 Validation Dataset directory로 이동
    train_idx, val_idx = train_test_split(np.arange(n_imgs), train_size=(1.-val_ratio))
    
    val_cat_dir = os.path.join(val_dir, category)
    os.makedirs(val_cat_dir, exist_ok=True)
    
    fnames = os.listdir(cat_dir)
    val_cnt = 0
    for idx, fname in enumerate(fnames):
        fpath = os.path.join(cat_dir, fname)
        if idx in val_idx:
            shutil.move(fpath, val_cat_dir)
            val_cnt += 1
    print("{} images are moved to the validation dataset".format(val_cnt))
    print("{} images are in the train dataset".format(n_imgs - val_cnt))
    print()
BBQ class has 189 images
38 images are moved to the validation dataset
151 images are in the train dataset

BHC class has 157 images
32 images are moved to the validation dataset
125 images are in the train dataset

goobne class has 178 images
36 images are moved to the validation dataset
142 images are in the train dataset

kyochon class has 172 images
35 images are moved to the validation dataset
137 images are in the train dataset

nene class has 164 images
33 images are moved to the validation dataset
131 images are in the train dataset

ttobongee class has 153 images
31 images are moved to the validation dataset
122 images are in the train dataset

step 3) Mobilenet을 차용하여 fine tuning 한 모델 구현

import tensorflow as tf
import numpy as np
from tensorflow import keras
import os
import matplotlib.pyplot as plt
print(tf.__version__)
2.0.0-beta1
from tensorflow.keras.layers import Conv2D, ReLU, MaxPooling2D, Dense, BatchNormalization, Softmax, GlobalAveragePooling2D
from tensorflow.keras import models
from tensorflow.keras import optimizers
from tensorflow.keras.preprocessing import image
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications.mobilenet import MobileNet, preprocess_input

# 캐라스에 이미 학습되어 업로드된 모델을 갖다 쓰는 것이다.
# 텐서플로우도 텐서플로우 허브에 가면 네트워크(가중치)들을 갖다 쓸 수 있다.
learning_rate = 0.0002
img_size = 224
batch_size = 16
cd '/content/gdrive/My Drive/TensorFlow_Training_13th'
/content/gdrive/My Drive/TensorFlow_Training_13th
cur_dir = os.getcwd()

train_dir = os.path.join(cur_dir, 'chicken')
val_dir = os.path.join(cur_dir, 'chicken_val')

n_class = len(os.listdir(train_dir))
print("This Dataset has {} classes".format(n_class))

n_train = 0
n_val = 0
for _, _, files in os.walk(train_dir):
    if files:
        n_train += len(files)
for _, _, files in os.walk(val_dir):
    if files:
        n_val += len(files)
        
print("Train Dataset has {} images".format(n_train))
print("Validation Dataset has {} images".format(n_val))
This Dataset has 6 classes
Train Dataset has 808 images
Validation Dataset has 205 images
datagen = ImageDataGenerator(
      rotation_range=10,
      width_shift_range=0.2,
      height_shift_range=0.2,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True,
      fill_mode='nearest')
sample_dir = os.listdir(train_dir)[0]
fnames = sorted([os.path.join(train_dir, sample_dir, fname) for fname in os.listdir(
                                                            os.path.join(train_dir, sample_dir))])
num_org_imgs = 5
num_iter = 20
img_paths = fnames[:num_org_imgs]
img_list = []
for img_path in img_paths:
    img = image.load_img(img_path, target_size=(img_size, img_size))
    x = image.img_to_array(img)
    img_list.append(x)

img_list = np.array(img_list)
img_list.shape
(5, 224, 224, 3)
row = num_iter // num_org_imgs
col = num_org_imgs
i = 0
plt.figure(figsize=(col*4, row*4))
for batch in datagen.flow(img_list, batch_size=1):
    plt.subplot(row, col, i+1)
    imgplot = plt.imshow(image.array_to_img(batch[0]))
    i += 1
    if i == num_iter:
        break

plt.show()
# weights = imagenet는 데이터로 학습한 가중치를 가져올 것이다.
# include_top = False로 하면 마지막에 1000개 그부분을 빼고 fully connected layer 
# 들어가기 전까지만 가져오겠다는 것이다.
# 다시말해서 마지막에 fully connected layer 1000개를 짤라내고 클래스를 사용자 임의로
# 6개면 6개로해서 추가학습을 시키는 것이다.
# include_top을 True로 하면 input_shape를 임의로 바꿀수 없다.

conv_base = MobileNet(weights='imagenet',include_top=False,input_shape=(img_size, img_size, 3))
conv_base.summary()
Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.6/mobilenet_1_0_224_tf_no_top.h5
17227776/17225924 [==============================] - 0s 0us/step
Model: "mobilenet_1.00_224"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 224, 224, 3)]     0         
_________________________________________________________________
conv1_pad (ZeroPadding2D)    (None, 225, 225, 3)       0         
_________________________________________________________________
conv1 (Conv2D)               (None, 112, 112, 32)      864       
_________________________________________________________________
conv1_bn (BatchNormalization (None, 112, 112, 32)      128       
_________________________________________________________________
conv1_relu (ReLU)            (None, 112, 112, 32)      0         
_________________________________________________________________
conv_dw_1 (DepthwiseConv2D)  (None, 112, 112, 32)      288       
_________________________________________________________________
conv_dw_1_bn (BatchNormaliza (None, 112, 112, 32)      128       
_________________________________________________________________
conv_dw_1_relu (ReLU)        (None, 112, 112, 32)      0         
_________________________________________________________________
conv_pw_1 (Conv2D)           (None, 112, 112, 64)      2048      
_________________________________________________________________
conv_pw_1_bn (BatchNormaliza (None, 112, 112, 64)      256       
_________________________________________________________________
conv_pw_1_relu (ReLU)        (None, 112, 112, 64)      0         
_________________________________________________________________
conv_pad_2 (ZeroPadding2D)   (None, 113, 113, 64)      0         
_________________________________________________________________
conv_dw_2 (DepthwiseConv2D)  (None, 56, 56, 64)        576       
_________________________________________________________________
conv_dw_2_bn (BatchNormaliza (None, 56, 56, 64)        256       
_________________________________________________________________
conv_dw_2_relu (ReLU)        (None, 56, 56, 64)        0         
_________________________________________________________________
conv_pw_2 (Conv2D)           (None, 56, 56, 128)       8192      
_________________________________________________________________
conv_pw_2_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_pw_2_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_dw_3 (DepthwiseConv2D)  (None, 56, 56, 128)       1152      
_________________________________________________________________
conv_dw_3_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_dw_3_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_pw_3 (Conv2D)           (None, 56, 56, 128)       16384     
_________________________________________________________________
conv_pw_3_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_pw_3_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_pad_4 (ZeroPadding2D)   (None, 57, 57, 128)       0         
_________________________________________________________________
conv_dw_4 (DepthwiseConv2D)  (None, 28, 28, 128)       1152      
_________________________________________________________________
conv_dw_4_bn (BatchNormaliza (None, 28, 28, 128)       512       
_________________________________________________________________
conv_dw_4_relu (ReLU)        (None, 28, 28, 128)       0         
_________________________________________________________________
conv_pw_4 (Conv2D)           (None, 28, 28, 256)       32768     
_________________________________________________________________
conv_pw_4_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_pw_4_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_dw_5 (DepthwiseConv2D)  (None, 28, 28, 256)       2304      
_________________________________________________________________
conv_dw_5_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_dw_5_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_pw_5 (Conv2D)           (None, 28, 28, 256)       65536     
_________________________________________________________________
conv_pw_5_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_pw_5_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_pad_6 (ZeroPadding2D)   (None, 29, 29, 256)       0         
_________________________________________________________________
conv_dw_6 (DepthwiseConv2D)  (None, 14, 14, 256)       2304      
_________________________________________________________________
conv_dw_6_bn (BatchNormaliza (None, 14, 14, 256)       1024      
_________________________________________________________________
conv_dw_6_relu (ReLU)        (None, 14, 14, 256)       0         
_________________________________________________________________
conv_pw_6 (Conv2D)           (None, 14, 14, 512)       131072    
_________________________________________________________________
conv_pw_6_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_6_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_7 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_7_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_7_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_7 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_7_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_7_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_8 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_8_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_8_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_8 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_8_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_8_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_9 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_9_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_9_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_9 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_9_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_9_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_10 (DepthwiseConv2D) (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_10_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_10_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_10 (Conv2D)          (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_10_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_10_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_11 (DepthwiseConv2D) (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_11_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_11_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_11 (Conv2D)          (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_11_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_11_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pad_12 (ZeroPadding2D)  (None, 15, 15, 512)       0         
_________________________________________________________________
conv_dw_12 (DepthwiseConv2D) (None, 7, 7, 512)         4608      
_________________________________________________________________
conv_dw_12_bn (BatchNormaliz (None, 7, 7, 512)         2048      
_________________________________________________________________
conv_dw_12_relu (ReLU)       (None, 7, 7, 512)         0         
_________________________________________________________________
conv_pw_12 (Conv2D)          (None, 7, 7, 1024)        524288    
_________________________________________________________________
conv_pw_12_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_pw_12_relu (ReLU)       (None, 7, 7, 1024)        0         
_________________________________________________________________
conv_dw_13 (DepthwiseConv2D) (None, 7, 7, 1024)        9216      
_________________________________________________________________
conv_dw_13_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_dw_13_relu (ReLU)       (None, 7, 7, 1024)        0         
_________________________________________________________________
conv_pw_13 (Conv2D)          (None, 7, 7, 1024)        1048576   
_________________________________________________________________
conv_pw_13_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_pw_13_relu (ReLU)       (None, 7, 7, 1024)        0         
=================================================================
Total params: 3,228,864
Trainable params: 3,206,976
Non-trainable params: 21,888
_________________________________________________________________
# 위에서 받아온 conv_base를 시퀀셜에다 집어넣고
# model.add(conv_base)처럼 모델에 집어넣고 레이어 하나처럼 쓰면된다.
# 그다음에 글로벌 에버리지 풀링하고, fully connected layer 두개를 썼다.

# trainable을 false로 할수도 있다. 이걸 false로 하면 읽어온 레이어는 
# 학습을 안시키겠다는 것이다. 가져온 레이어는 가중치를 고정하고
# 내가 새로 추가하는 부분만 학습시키겠다는 것이다.
# 내가 가진 데이터가 매우 적을때 이 방법을 쓰는 경우가 많다.

model = models.Sequential()
model.add(conv_base)
model.add(GlobalAveragePooling2D())
model.add(Dense(256))
model.add(BatchNormalization())
model.add(ReLU())
model.add(Dense(n_class))
model.add(BatchNormalization())
model.add(Softmax())

model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
mobilenet_1.00_224 (Model)   (None, 7, 7, 1024)        3228864   
_________________________________________________________________
global_average_pooling2d (Gl (None, 1024)              0         
_________________________________________________________________
dense (Dense)                (None, 256)               262400    
_________________________________________________________________
batch_normalization (BatchNo (None, 256)               1024      
_________________________________________________________________
re_lu (ReLU)                 (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 6)                 1542      
_________________________________________________________________
batch_normalization_1 (Batch (None, 6)                 24        
_________________________________________________________________
softmax (Softmax)            (None, 6)                 0         
=================================================================
Total params: 3,493,854
Trainable params: 3,471,442
Non-trainable params: 22,412
_________________________________________________________________
lr_schedule = keras.optimizers.schedules.ExponentialDecay(initial_learning_rate=learning_rate,
                                                          decay_steps=n_train//batch_size*5,
                                                          decay_rate=0.5,
                                                          staircase=True)
model.compile(optimizers.Adam(lr_schedule), loss='categorical_crossentropy', metrics=['accuracy'])
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
                                   rotation_range=10,
                                   width_shift_range=0.2,
                                   height_shift_range=0.2,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True,
                                   fill_mode='nearest')

val_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
train_generator = train_datagen.flow_from_directory(train_dir,
                                                    target_size=(img_size, img_size),
                                                    batch_size=batch_size,
                                                    class_mode='categorical')
val_generator = val_datagen.flow_from_directory(val_dir,
                                               target_size=(img_size, img_size),
                                               batch_size=batch_size,
                                               class_mode='categorical')
Found 808 images belonging to 6 classes.
Found 205 images belonging to 6 classes.
history = model.fit_generator(train_generator,
                             steps_per_epoch=n_train//batch_size,
                             epochs=10,
                             validation_data=val_generator,
                             validation_steps=n_val//batch_size)
Epoch 1/10


WARNING: Logging before flag parsing goes to stderr.
W0730 14:18:19.941306 139895213557632 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_grad.py:1250: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where


50/50 [==============================] - 264s 5s/step - loss: 1.3121 - accuracy: 0.5189 - val_loss: 0.8908 - val_accuracy: 0.7083
Epoch 2/10
50/50 [==============================] - 23s 451ms/step - loss: 0.8955 - accuracy: 0.7487 - val_loss: 0.7828 - val_accuracy: 0.7396
Epoch 3/10
50/50 [==============================] - 22s 444ms/step - loss: 0.7644 - accuracy: 0.8207 - val_loss: 0.6934 - val_accuracy: 0.7969
Epoch 4/10
50/50 [==============================] - 22s 447ms/step - loss: 0.6838 - accuracy: 0.8675 - val_loss: 0.6697 - val_accuracy: 0.7969
Epoch 5/10
50/50 [==============================] - 22s 442ms/step - loss: 0.6066 - accuracy: 0.9082 - val_loss: 0.7189 - val_accuracy: 0.8073
Epoch 6/10
50/50 [==============================] - 22s 436ms/step - loss: 0.5785 - accuracy: 0.9179 - val_loss: 0.7033 - val_accuracy: 0.8385
Epoch 7/10
50/50 [==============================] - 22s 434ms/step - loss: 0.5431 - accuracy: 0.9343 - val_loss: 0.6294 - val_accuracy: 0.8802
Epoch 8/10
50/50 [==============================] - 22s 432ms/step - loss: 0.5485 - accuracy: 0.9318 - val_loss: 0.6583 - val_accuracy: 0.8490
Epoch 9/10
50/50 [==============================] - 21s 427ms/step - loss: 0.5405 - accuracy: 0.9356 - val_loss: 0.6159 - val_accuracy: 0.8802
Epoch 10/10
50/50 [==============================] - 22s 431ms/step - loss: 0.5099 - accuracy: 0.9583 - val_loss: 0.6149 - val_accuracy: 0.8854
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'r', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()

plt.figure()

plt.plot(epochs, loss, 'r', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()

plt.show()

32_0

32_1