{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom pathlib import Path\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras import layers, optimizers\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.model_selection import train_test_split","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/dog-breed-identification/labels.csv')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.id = df.id.apply(lambda x: x+ '.jpg')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df,val_df = train_test_split(df,test_size = 0.25,random_state = 42)\ntrain_df.shape,val_df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n      rescale=1./255,\n      rotation_range=40,\n      width_shift_range=0.2,\n      height_shift_range=0.2,\n      shear_range=0.2,\n      zoom_range=0.2,\n      horizontal_flip=True,\n      fill_mode='nearest'\n)\n\ntrain_data = train_datagen.flow_from_dataframe( \n    train_df,\n    '../input/dog-breed-identification/train', \n    x_col='id',\n    y_col='breed',\n    target_size=(299,299),\n    class_mode='categorical',\n    batch_size=20\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_datagen = ImageDataGenerator(rescale = 1/255)\n\nval_data = valid_datagen.flow_from_dataframe(val_df,\n                                             '../input/dog-breed-identification/train',\n                                             x_col = 'id',\n                                             y_col = 'breed',\n                                             target_size = (299,299),\n                                             class_mode = 'categorical',\n                                             batch_size = 20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.applications.inception_v3 import InceptionV3\n\nbase_inception = InceptionV3(weights='imagenet', include_top = False, input_shape=(299, 299, 3))\n\nfor layer in base_inception.layers:\n    layer.trainable =  False\n\nprint(base_inception.summary())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras\nfrom keras.layers import GlobalAveragePooling2D,Dropout,Flatten,Dense\nout = base_inception.output\nout = GlobalAveragePooling2D()(out)\n\npredictions = Dense(120, activation='softmax')(out)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Model\n\nmodel = Model(inputs=base_inception.input, outputs=predictions)\n    \nmodel.summary()\n# Compile \n\n#opt = tf.keras.optimizers.RMSprop(lr=0.0001)\nopt = tf.keras.optimizers.Adam(\n     learning_rate=0.0001,\n     beta_1=0.9,\n     beta_2=0.999,\n     epsilon=1e-07,\n     amsgrad=False\n )\nmodel.compile(optimizer =opt, loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit(train_data,epochs = 50, \n                    steps_per_epoch=10,\n                    validation_data = val_data,\n                    validation_steps=10, \n                    verbose=True)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}