{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport glob\nimport json\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom keras.preprocessing.image import ImageDataGenerator, load_img , img_to_array\n\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport cv2\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D,GlobalAveragePooling2D, Flatten, Dense, Dropout, BatchNormalization\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\nfrom tensorflow.keras.optimizers import Adam\n\nfrom sklearn.model_selection import train_test_split\nfrom IPython.display import Image, display\nimport warnings\nwarnings.filterwarnings('ignore')\nimport sys\n\nimport logging\nlogger = tf.get_logger()\nlogger.setLevel(logging.ERROR)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Importing all the libraries and making a model on neural network","metadata":{}},{"cell_type":"code","source":"tf.__version__\n# sys.version\n# !python -V","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"main_dir = \"/kaggle/input/dog-breed-identification/\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data_dir = main_dir + \"train/\"\ntest_data_dir = main_dir + \"test/\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(os.listdir(train_data_dir)), len(os.listdir(test_data_dir))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = pd.read_csv('/kaggle/input/dog-breed-identification/labels.csv')\nsamples = pd.read_csv('/kaggle/input/dog-breed-identification/sample_submission.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"samples.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df=pd.read_csv('/kaggle/input/dog-breed-identification/labels.csv')\ndf['breed'].unique() ,len(df['breed'].unique())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = df.assign(img_path = lambda x : train_data_dir + x['id'] + '.jpg')\ntrain_data.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data['img_path'][0]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(0 , 5):\n  display(Image(train_data['img_path'][i]))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels_df = pd.read_csv('/kaggle/input/dog-breed-identification/labels.csv')\nlabels_df['id'] = labels_df['id'] + '.jpg'\nlabels_df.breed.value_counts().plot.bar(figsize=(30, 15) , color = \"red\");","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Now Loading the data in image generator**","metadata":{}},{"cell_type":"code","source":"datagen = ImageDataGenerator(rescale=1.0 / 255,\n                             rotation_range= 0.2,\n                             horizontal_flip=True,\n                             zoom_range = 0.2,\n                             vertical_flip=True,\n                             shear_range=0.2,\n                             validation_split=0.2)\n\ntrain = datagen.flow_from_dataframe(labels_df,\n                                    directory=train_data_dir,\n                                    x_col='id',\n                                    y_col='breed',\n                                    subset='training',\n                                    target_size=(224, 224),\n                                    batch_size=32,\n                                    seed=123)\n\nval = datagen.flow_from_dataframe(labels_df,\n                                  directory=train_data_dir,\n                                  x_col='id',\n                                  y_col='breed',\n                                  subset='validation',\n                                  target_size=(224, 224),\n                                  batch_size=32,\n                                  seed=123)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from keras.applications.densenet import DenseNet169 \n# from keras.applications.resnet import ResNet50\n\n# base = DenseNet169(weights = 'imagenet', include_top = False, input_shape = (224, 224, 3))\n# tf.keras.backend.clear_session()\n\n# for layer in base.layers:\n#     layer.trainable =  False\n\n# model = tf.keras.Sequential([\n#                           base,\n#                           # layers.Flatten(input_shape=(128, 128 , 3)),\n#                           layers.GlobalMaxPooling2D(),\n#                           layers.BatchNormalization(),\n#                           layers.Dense(256, activation='relu'),\n#                           layers.Dropout(0.5),\n#                           layers.BatchNormalization(),\n#                           layers.Dense(128, activation='relu'),\n#                           layers.Dropout(0.5),\n#                           layers.Dense(120, activation='softmax'),\n# ])\n# model = Sequential([\n#   layers.experimental.preprocessing.Rescaling(1./255, input_shape=(180, 180, 3)),\n#   layers.Conv2D(16, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Conv2D(32, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Conv2D(64, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Flatten(),\n#   layers.Dense(256, activation='relu'),\n#   layers.Conv2D(64, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.BatchNormalization(),\n#   layers.Dropout(0.5),\n#   layers.Dense(128, activation='relu'),\n#   layers.Dense(120)\n# ])\n\n# model = Sequential([\n#   layers.experimental.preprocessing.Rescaling(1./255, input_shape=(180, 180, 3)),\n#   layers.Conv2D(32, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Conv2D(64, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Conv2D(128, 3, padding='same', activation='relu'),\n#   layers.MaxPooling2D(),\n#   layers.Flatten(),\n#   layers.Dense(256, activation='relu'),\n#   layers.Dense(128 ,activation='relu'),\n#   layers.Dense(120)\n# ])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# preprocess_input = tf.keras.applications.mobilenet_v2.preprocess_input","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# rescale = tf.keras.layers.experimental.preprocessing.Rescaling(1./127.5, offset= -1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = tf.keras.applications.MobileNetV2(input_shape=(224,224,3),\n                                               include_top=False,\n                                               weights='imagenet')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.applications.inception_resnet_v2 import InceptionResNetV2 \nfrom keras.applications.inception_v3 import InceptionV3, preprocess_input","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from keras.applications.inception_resnet_v2 import InceptionResNetV2 \n# from keras.applications.inception_v3 import InceptionV3\n\n# base = InceptionV3(weights = 'imagenet', include_top = False, input_shape = (224, 224, 3))\n# base = InceptionResNetV2(weights = 'imagenet', include_top = False, input_shape = (224, 224, 3))\n# # tf.keras.backend.clear_session()\n\n# for layer in base.layers:\n#     layer.trainable =  False\n\nmodel = tf.keras.Sequential([\n#                           base,\n#                           layers.Flatten(input_shape=(224, 224 , 3)),\n                          layers.GlobalMaxPooling2D(),\n                          layers.BatchNormalization(),\n                          layers.Dense(256, activation='relu'),\n                          layers.Dropout(0.5),\n                          layers.BatchNormalization(),\n                          layers.Dense(128, activation='relu'),\n                          layers.Dropout(0.5),\n                          layers.Dense(120, activation='softmax'),\n])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss='categorical_crossentropy' , optimizer = \"adam\" , metrics=['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = 1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(train,validation_data=val,epochs=epochs)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\n\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs_range = range(epochs)\n\nplt.figure(figsize=(8, 8))\nplt.subplot(1, 2, 1)\nplt.plot(epochs_range, acc, label='Training Accuracy')\nplt.plot(epochs_range, val_acc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.title('Training and Validation Accuracy')\n\nplt.subplot(1, 2, 2)\nplt.plot(epochs_range, loss, label='Training Loss')\nplt.plot(epochs_range, val_loss, label='Validation Loss')\nplt.legend(loc='upper right')\nplt.title('Training and Validation Loss')\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}