{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport seaborn as sns\nimport matplotlib\nimport os\nfrom shutil import copyfile,copy,copy2\nimport matplotlib.pyplot as plt\nfrom tensorflow import keras\nimport tensorflow as tf\nimport keras\n#%matplotlib inline\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img\nfrom keras.models import Sequential\nfrom keras.layers import Convolution2D\nfrom keras.layers import MaxPooling2D\nfrom keras.layers import BatchNormalization\nfrom keras.layers import Flatten\nfrom keras.layers import Dense\nfrom keras.layers import Conv2D,Dropout\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.applications.resnet50 import ResNet50\nfrom keras.models import Model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels = pd.read_csv('../input/dog-breed-identification/labels.csv')\nlabels.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_file = '../input/dog-breed-identification/train/'\n\ndf = labels.assign(img_path=lambda x: img_file + x['id'] +'.jpg')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Top 20 breeds in the dataset\ndf.breed.value_counts().sort_values(ascending=False).head(20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"top_20=list(df.breed.value_counts()[0:20].index)\ntop_20","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\n\nimages = np.array([img_to_array(load_img(img, target_size=(50,50,3))) for img in df['img_path'].values.tolist()])\n\nimages.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ytrain = df.breed\nytrain = pd.get_dummies(ytrain)\nytrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"xtrain=images\nytrain=ytrain.values\nprint(xtrain.shape)\nprint(ytrain.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n    rotation_range=30,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    rescale=1./255,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    fill_mode='nearest')\n\n#test_datagen=ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trainingdata = train_datagen.flow(xtrain,y=ytrain,batch_size=5000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(64,kernel_size=(3,3),activation='relu',input_shape=(50,50,3)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(32,kernel_size=(3,3),activation='relu',padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(32,kernel_size=(3,3),activation='relu',padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(32,activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(64,activation='relu'))\nmodel.add(Dense(120,activation='softmax'))\n\nmodel.compile(loss=tf.keras.losses.categorical_crossentropy,optimizer='adam',metrics=['accuracy'])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(xtrain,ytrain,validation_split=0.1,verbose=1,epochs=2,batch_size=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['loss'],label='Training Loss')\nplt.plot(history.history['val_loss'],label='Validation Loss')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['accuracy'],label='Training Accuracy')\nplt.plot(history.history['val_accuracy'],label='Validation Accuracy')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"training_accuracy = history.history['accuracy'][-1:]\nvalidation_accuracy = history.history['val_accuracy'][-1:]\ntraining_loss = history.history['loss'][-1:]\nvalidation_loss = history.history['val_loss'][-1:]\nprint('Training Accuracy: ',training_accuracy)\nprint('Validation Accuracy: ',validation_accuracy)\nprint('Training LOSS: ',training_loss)\nprint('Validation LOSS: ',validation_loss)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"path = '../input/'\nos.listdir(path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.chdir(\"/kaggle/working/\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.makedirs('/kaggle/working/temp/')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from distutils.dir_util import copy_tree\n\nfromdirectory = '../input/dog-breed-identification/'\ntodirectory = 'temp/'\n\ncopy_tree(fromdirectory,todirectory)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import shutil\nshutil.rmtree(\"/kaggle/working/temp/train\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"direc = '/kaggle/working/temp/'\ntest_datagen=ImageDataGenerator(rescale=1./255)\ntestdata = test_datagen.flow_from_directory(directory=direc,target_size=(50,50))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.read_csv('../input/dog-breed-identification/sample_submission.csv')\nsubmission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds = model.predict(testdata, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"resnet_5_submission = pd.DataFrame(preds)\n#df = pd.DataFrame(data)\nytrain=pd.DataFrame(ytrain)\ncol_names = ytrain.columns.values\nresnet_5_submission.columns = col_names\nresnet_5_submission.insert(0, 'id', submission['id'])\nresnet_5_submission.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"resnet_5_submission.to_csv(\"resnet_5_submission.csv\",index=False)\npd.read_csv('resnet_5_submission.csv')","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}