kernel11ab6576ac

From: https://www.kaggle.com/alainminda/kernel11ab6576ac

Author: robur

In [1]:
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in 

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory

import os
print(os.listdir("../input"))

# Any results you write to the current directory are saved as output.
['inceptionv3', 'inaturalist-2019-fgvc6']
In [2]:
import json


ann_file = '../input/inaturalist-2019-fgvc6/train2019.json'
with open(ann_file) as data_file:
        train_anns = json.load(data_file)
In [3]:
train_anns_df = pd.DataFrame(train_anns['annotations'])[['image_id','category_id']]
train_img_df = pd.DataFrame(train_anns['images'])[['id', 'file_name']].rename(columns={'id':'image_id'})
df_train_file_cat = pd.merge(train_img_df, train_anns_df, on='image_id')
df_train_file_cat['category_id']=df_train_file_cat['category_id'].astype(str)
df_train_file_cat.head()
Out[3]:
image_id file_name category_id
0 0 train_val2019/Plants/400/d1322d13ccd856eb4236c... 400
1 1 train_val2019/Plants/570/15edbc1e2ef000d8ace48... 570
2 2 train_val2019/Reptiles/167/c87a32e8927cbf4f06d... 167
3 3 train_val2019/Birds/254/9fcdd1d37e96d8fd94dfdc... 254
4 4 train_val2019/Plants/739/ffa06f951e99de9d220ae... 739
In [4]:
print(len(df_train_file_cat))
265213
In [5]:
# splitting data into train and validation
from sklearn.model_selection import train_test_split
train, valid = train_test_split(df_train_file_cat, stratify=df_train_file_cat.category_id, test_size=0.2)
In [6]:
nb_classes = 1010
batch_size = 64
img_size = 299
nb_epochs = 2
In [7]:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Add our data-augmentation parameters to ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255.,
                                   rotation_range = 20,
                                   width_shift_range = 0.2,
                                   height_shift_range = 0.2,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

# Note that the validation data should not be augmented!
test_datagen = ImageDataGenerator( rescale = 1.0/255. )

# Flow training images in batches of 20 using train_datagen generator
train_generator = train_datagen.flow_from_dataframe(train,
                                                    directory="../input/inaturalist-2019-fgvc6/train_val2019", 
                                                    x_col='file_name', 
                                                    y_col='category_id',
                                                    batch_size = batch_size,
                                                    class_mode = 'categorical', 
                                                    target_size = (img_size, img_size), 
                                                    color_mode='rgb')     

# Flow validation images in batches of 20 using test_datagen generator
validation_generator =  test_datagen.flow_from_dataframe( valid,
                                                          directory="../input/inaturalist-2019-fgvc6/train_val2019", 
                                                          x_col='file_name', 
                                                          y_col='category_id',
                                                          batch_size  = batch_size,
                                                          class_mode  = 'categorical', 
                                                          target_size = (img_size, img_size), 
                                                          color_mode='rgb')
Found 212170 images belonging to 1010 classes.
Found 53043 images belonging to 1010 classes.
In [8]:
from tensorflow.keras import layers
from tensorflow.keras import Model
  
from tensorflow.keras.applications.inception_v3 import InceptionV3

local_weights_file = '../input/inceptionv3/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5'

pre_trained_model = InceptionV3(input_shape = (img_size, img_size, 3), 
                                include_top = False, 
                                weights = None)

pre_trained_model.load_weights(local_weights_file)
for layer in pre_trained_model.layers:
    layer.trainable = True
for layer in pre_trained_model.layers:
  if layer.name == 'mixed6':
    break
  layer.trainable = False
  
# pre_trained_model.summary()

last_layer = pre_trained_model.get_layer('mixed7')
print('last layer output shape: ', last_layer.output_shape)
last_output = last_layer.output
WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
last layer output shape:  (None, 17, 17, 768)
In [9]:
# Check the trainable status of the individual layers
for layer in pre_trained_model.layers:
    print(layer, layer.trainable)
<tensorflow.python.keras.engine.input_layer.InputLayer object at 0x7fb4313ff710> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb4313ffa58> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4313ffdd8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb4313ffeb8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430bf64a8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4313d4b70> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430c18780> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb43136fc50> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb431607668> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43142c518> False
<tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7fb4313869e8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb4313867b8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb43122d9e8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43122db38> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb431247a90> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4311ded68> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb4311de588> False
<tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7fb43117de48> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430f96ac8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430f2fc88> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430f2fbe0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb4310bfeb8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430ed16d8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4310d25c0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430defac8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb4310d2390> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430e6a2b0> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb430d4b780> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb43117d6a0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430ff9898> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430e10be0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430d01cf8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4310f5b38> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430fdaf28> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430da7780> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430cc3588> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb4310f5c18> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb431012080> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430da74a8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430cc3630> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb430c6def0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb4301dce48> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4301dc668> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43017b860> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430364ef0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb43011bc50> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb43037a080> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb43012e5f8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43037a780> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43012e240> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42fff5a90> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb430c6df60> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb43029fb70> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb4300d2eb8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fff5a58> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb430c84080> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb4302b6e48> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb43006d048> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ff95048> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb430c84320> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb4302b6630> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb43006d1d0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ff95a90> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42ff33940> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fd46f98> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fcdf4e0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fc586a0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fe6c4a8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fc81d30> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fe0bac8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fc1acc0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fe81278> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fc1a470> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42fafbd30> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ff33c50> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fda5e10> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fbbe7b8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fb106d8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ff458d0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fdbb550> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fade940> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42fa6b908> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ff45828> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fdbb2b0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fbd7860> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42fa6ba20> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42fa35be0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f971ac8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f989518> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f989240> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f90edd8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f8a8240> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f8a8e80> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42fa356a0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f84d9e8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f9a9828> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f7709e8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f9a9940> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f7e5cc0> False
<tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7fb42f78be48> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42f78b5c0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f459ba8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f470e80> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f470668> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f398e80> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f3378d0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f3aea58> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f6c77b8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f357be0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f5e59b0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f357278> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f6587f0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f2eb630> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f5ffcc0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f28eef0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f614710> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f22b048> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f614438> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f22b2e8> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42f0eeeb8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f78b6a0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f539e10> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f1b1ac8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f0ee550> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f6aa7b8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f553080> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f1b19b0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42f066be0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f6aaf28> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f553278> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f1575c0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42f08e7f0> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42f02cdd8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ed7e668> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42eca09b0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ed1a898> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ecbecc0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ecce710> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ecce550> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ef69d68> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ebf8860> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ef69400> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ec12080> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ef7b320> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ec122e8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ef08fd0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42eb19ba8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42eea3a58> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42eb31e80> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42eebd080> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42eb313c8> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42e998be0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42f03e828> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ee41fd0> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ea59e80> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e998358> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ef9fac8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42eddb6a0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e9f98d0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e98b860> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ef9ffd0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42eddb4a8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ea6fa58> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e98b978> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42e950b38> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e5a9e80> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e5bf5c0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e5bf390> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e548ef0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e4e3550> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e4fd128> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e88db00> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e485cf8> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e872d30> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e41ccc0> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e8407b8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e41cba8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e7aacf8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e3c35c0> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e7c2198> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e2e1a90> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e7c2e10> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e3598d0> False
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42e23df28> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e904780> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e669978> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e2f7cf8> False
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e221f98> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e8c4a58> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e60bb38> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e317748> False
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e1b3588> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e8c46d8> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e686908> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e317588> False
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e1b3630> False
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42e175eb8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42dece518> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42dece160> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42de654e0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ddedd30> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42de061d0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42de06e48> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e099e48> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42dd2c9b0> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e0af2b0> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42dccd860> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e0afef0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42dd43c18> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e053a90> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42dc69e10> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42dfedd68> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42dc7e860> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42dfed2b0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42dc7e6a0> True
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42db45ac8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42e15ce48> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42df91a90> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42dc08f28> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42db45cc0> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42e0eda20> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42deaf7b8> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42dba5588> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42da63278> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42e0ed4a8> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42df25940> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42dbc1080> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42da63fd0> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42da84ba8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d8faeb8> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d819898> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d911a20> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d837ba8> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d84e5f8> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d84e320> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42da84eb8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d771eb8> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d99f160> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d78e048> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d99feb8> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d78e1d0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d9bfb38> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d713a90> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d9d3e10> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d6acd68> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d9d3358> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d6ac2b0> True
<tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7fb42d651eb8> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42d5a6860> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d323b70> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d33b470> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d2c51d0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d593550> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d262b70> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d4adb00> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d279e48> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d5248d0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d279390> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d4c77b8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d3e7f98> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d19def0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d0debe0> True
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42d07aef0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d651630> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d45d780> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d4044e0> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d1408d0> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d0f3630> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42d095240> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42d5c8b70> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d45d438> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d3786a0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d1b4a58> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d0f3358> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cfb9908> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42d5c8cf8> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42d323d30> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42d07ae80> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cfb9f28> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42cfb9d68> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ccab898> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ccbf2e8> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cc229b0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cef2cc0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cbe7cf8> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cf0c550> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cbfd6a0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cea8128> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cbfd2e8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42ce2dac8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cd6f6d8> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cb80ef0> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cac2b70> True
<tensorflow.python.keras.layers.pooling.AveragePooling2D object at 0x7fb42ca00f60> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42cfd3a58> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ce47c88> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cd0fa90> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cb20080> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42ca5ae48> True
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb42c978c88> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42cf46860> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ce47be0> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cd84278> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cb20a58> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42ca5a390> True
<tensorflow.python.keras.layers.normalization.BatchNormalizationV1 object at 0x7fb42c91f898> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42cf466d8> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42ccabdd8> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42ca00e48> True
<tensorflow.python.keras.layers.core.Activation object at 0x7fb42c93c7b8> True
<tensorflow.python.keras.layers.merge.Concatenate object at 0x7fb42c93c940> True
In [10]:
from tensorflow.keras.optimizers import RMSprop

# Flatten the output layer to 1 dimension
x = layers.Flatten()(last_output)
# Add a fully connected layer with 1,024 hidden units and ReLU activation
x = layers.Dense(1024, activation='relu')(x)
# Add a dropout rate of 0.2
x = layers.Dropout(rate=0.2)(x)                  
# Add a final sigmoid layer for classification
x = layers.Dense  (nb_classes, activation='softmax')(x)           

model = Model( pre_trained_model.input, x) 

model.compile(optimizer = RMSprop(lr=0.0001), 
              loss = 'categorical_crossentropy', 
              metrics = ['accuracy'])
WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/layers/core.py:143: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
In [11]:
history = model.fit_generator(train_generator, epochs=nb_epochs, validation_data = validation_generator, verbose = 1)

model.save("rps.h5")
WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Epoch 1/2
829/829 [==============================] - 1134s 1s/step - loss: 3.8342 - acc: 0.2115
3316/3316 [==============================] - 10317s 3s/step - loss: 4.7124 - acc: 0.1258 - val_loss: 3.8342 - val_acc: 0.2115
Epoch 2/2
1808/3316 [===============>..............] - ETA: 1:08:56 - loss: 3.6260 - acc: 0.2327
In [12]:
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))

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


plt.show()
<Figure size 432x288 with 0 Axes>