{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nimport random\nimport numpy as np\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow.keras.preprocessing.image import load_img \nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.python.keras.layers.core import Dropout\nfrom keras.layers import BatchNormalization, Dense, GlobalAveragePooling2D, Lambda, Dropout, InputLayer, Input\n\n\n\nbase_dir = '../input/dog-breed-identification'\n\n# Directory with our training Dog pictures\ntrain_dir = os.path.join(base_dir, 'train')\n\n# Directory with our testing Dog pictures\ntest_dir = os.path.join(base_dir, 'test')\n\n# Storing Dog labels in a Dataframe\ndog_labels_df = pd.read_csv(base_dir + '/labels.csv')\n\nsample_df = pd.read_csv(base_dir + '/sample_submission.csv')\n\n\ndog_list = ['beagle', 'chihuahua', 'doberman', 'french_bulldog', 'golden_retriever', 'malamute', 'pug', 'saint_bernard', 'scottish_deerhound', 'tibetan_mastiff']\n\ndog_set = set(dog_list)\nnum_classes = 10\ndog_dataframe = dog_labels_df.loc[dog_labels_df['breed'].isin(dog_list)]\ndog_dataframe = dog_dataframe.reset_index()\nprint(dog_dataframe.head())\nprint(len(dog_dataframe))\n\n# Creating a list of distinct dog breeds\ndog_breeds = sorted(list(set(dog_dataframe['breed'])))\n\n\n# Associating each breed with an integer\nclass_to_num = dict(zip(dog_breeds, range(num_classes)))\n\ndef img_to_array(data_dir, labels_df, image_size=(300, 300, 3)):\n\n    filenames = labels_df['id']\n    labels = labels_df['breed']\n\n    # Number of images\n    data_size = len(filenames)\n    print(\"Data size: \", data_size)\n\n    # Initializing Image Numpy array\n    X = np.zeros([data_size, image_size[0], image_size[1], image_size[2]], dtype=np.uint8)\n    Y = np.zeros([data_size, 1], dtype=np.uint8)\n\n    for i in range(data_size):\n        file = filenames[i]\n        #print(\"This is the first file: \", file)\n        img_path = os.path.join(data_dir, file + '.jpg')\n        \n\n        # converting Images to 4-D Numpy array\n        img_pixels = load_img(img_path, target_size=image_size)\n        X[i] = img_pixels\n\n        # Converting Labels to 2-D numpy array\n        image_breed = labels[i]\n        Y[i] = class_to_num[image_breed]\n\n    # One-hot encoding\n    Y = to_categorical(Y)\n\n    #shuffle the images and label arrays\n    ind = np.random.permutation(data_size)\n    X = X[ind]\n    Y = Y[ind]\n    #print(Y[0])\n\n    print(\"Output data shape: \", X.shape)\n    print(\"Output labels shape: \", Y.shape)\n    return X, Y\n\n# Shape of our Input images\nimg_size = (224, 224, 3)\ntrain_images, train_labels = img_to_array(train_dir, dog_dataframe, img_size)\n\n\n# Scaling values between 0-1\ntrain_images = train_images / 255.0\n\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.applications.resnet50 import ResNet50\nfrom tensorflow.keras.models import Sequential,Model,load_model\n\nimg_input = layers.Input(shape=(224, 224, 3))\n\nbase_model = ResNet50(weights='imagenet')\n\n\n#Prepare DNN model\nmodel = tf.keras.models.Sequential()\n\nmodel.add(base_model)\n\nmodel.add(layers.Flatten(input_shape=(224, 224)))\nmodel.add(layers.Dense(units=128, activation='relu'))\n#model.add(layers.Dropout(0.5))\nmodel.add(layers.Dense(units=64, activation='relu'))\nmodel.add(layers.Dense(units=10, activation='softmax')) \n\nmodel.compile(optimizer=tf.keras.optimizers.Adam(lr=0.001),\n              loss=tf.keras.losses.CategoricalCrossentropy(),\n              metrics=['accuracy'])\n\n#Train simple DNN.\nhistory = model.fit(train_images, train_labels,\n            batch_size=32,\n            epochs=60,\n            validation_split=0.2\n             )\n\n# This function is to convert Test images to Numpy arrays\ndef img_to_array2(data_dir, labels_df, image_size=(224, 224, 3)):\n\n    filenames = labels_df['id']\n\n    # Number of images\n    data_size = len(filenames)\n\n    # Initializing Image Numpy array\n    X = np.zeros([data_size, image_size[0], image_size[1], image_size[2]], dtype=np.uint8)\n\n    for i in range(data_size):\n        file = filenames[i]\n        img_path = os.path.join(data_dir, file + '.jpg')\n\n        # converting Images to 4-D Numpy array\n        img_pixels = load_img(img_path, target_size=image_size)\n        X[i] = img_pixels\n\n    print(\"Output data shape: \", X.shape)\n    return X\n\ndel train_images\n\ntest_images= img_to_array2(test_dir, sample_df, img_size)\n\ntest_images = test_images / 255.0\n\n# Evaluate against the test set.\nprint(\"\\n Evaluate the new model against the test set:\")\ny_pred = model.predict(train_images, batch_size=32)\n\nfor b in dog_list:\n    sample_df[b] = y_pred[:,class_to_num[b]]\nsample_df.to_csv('pred.csv', index=None)\n\n","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}