{"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 in \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 \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":1,"outputs":[{"output_type":"stream","text":"['wildcam-reduced', 'iwildcam-2019-fgvc6']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import cv2\nimport keras\nimport keras.backend as K\nfrom keras.models import Sequential\nfrom keras.callbacks import Callback\nfrom keras.layers import Dense,Conv2D,MaxPooling2D,Flatten,Dropout,Activation\nfrom glob import glob\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score\n%matplotlib inline","execution_count":2,"outputs":[{"output_type":"stream","text":"Using TensorFlow backend.\n","name":"stderr"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"def vectorize(n):\n    n = int(n)\n    a = [0 for i in range(14)]\n    if n <= 13:\n        a[n] = 1\n    else:\n        a[0] = 1\n    return a","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = np.load(\"../input/wildcam-reduced/X_train.npy\")\nY_train = np.load(\"../input/wildcam-reduced/y_train.npy\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(X_train.shape)\nprint(Y_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = np.load(\"../input/wildcam-reduced/X_test.npy\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.astype(\"float32\")/255.0\nX_test = X_test.astype(\"float32\")/255.0\n# Y_train = Y_train.astype(\"float32\")/255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model1 = Sequential()\n\n# model1.add(Conv2D(64,(3,3),strides = 3,padding = \"same\",activation = \"relu\",input_shape = (32,32,3)))\n# model1.add(Conv2D(64,(3,3),strides = 3,padding = \"same\",activation = \"relu\"))\n# model1.add(Dropout(0.35))\n\n# model1.add(Conv2D(128,(3,3),strides = 3,padding = \"same\",activation = \"relu\"))\n# model1.add(Dropout(0.35))\n\n\n# model1.add(Conv2D(256,(3,3),strides = 3,padding = \"same\",activation = \"relu\"))\n\n\n# model1.add(Conv2D(256,(3,3),strides = 3,padding = \"same\",activation = \"relu\"))\n\n\n# model1.add(Conv2D(512,(3,3),strides = 3,padding = \"same\",activation = \"relu\"))\n# model1.add(Dropout(0.20))\n\n# model1.add(Flatten())\n# model1.add(Dropout(0.20))\n# model1.add(Dense(512,activation = \"relu\"))\n# model1.add(Dropout(0.20))\n# model1.add(Dense(128,activation = \"relu\"))\n# model1.add(Dropout(0.20))\n# model1.add(Dense(64,activation = \"relu\"))\n# model1.add(Dropout(0.20))\n# model1.add(Dense(32,activation = \"relu\"))\n# model1.add(Dense(14,activation = \"softmax\"))\n# model1.summary()\n\n\n\n\n\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model1.compile(optimizer = \"adam\",loss = \"categorical_crossentropy\",metrics = [\"accuracy\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model1.fit(X_train,Y_train,batch_size = 150,epochs = 20,validation_split = 0.25)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nbatch_size = 64\nnum_classes = 14\nepochs = 30\nval_split = 0.1\nsave_dir = os.path.join(os.getcwd(), 'models')\nmodel_name = 'keras_cnn_model.h5'\nmodel = Sequential()\nmodel.add(Conv2D(32, (3, 3), padding='same',\n                 input_shape=X_train.shape[1:]))\nmodel.add(Activation('relu'))\nmodel.add(Conv2D(32, (3, 3)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(64, (3, 3), padding='same'))\nmodel.add(Activation('relu'))\nmodel.add(Conv2D(64, (3, 3)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(512))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(num_classes))\nmodel.add(Activation('softmax'))\n\nmodel.compile(\n    loss='categorical_crossentropy',\n    optimizer='adam',\n    metrics=['accuracy']\n)\n\nhist = model.fit(\n    X_train, \n    Y_train,\n    batch_size=batch_size,\n    epochs=epochs,\n    validation_split=val_split,\n    shuffle=True\n)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light = Sequential()\n# vgg_light.add(Conv2D(64,(3,3),padding = \"same\",strides = 3,activation = \"relu\",input_shape = (32,32,3)))\n# vgg_light.add(Conv2D(64,(3,3),padding = \"same\",strides = 3,activation = \"relu\"))\n# # vgg_light.add(MaxPooling2D(pool_size = (2,2)))\n# vgg_light.add(Conv2D(128,(3,3),padding = \"same\",strides = 3,activation = \"relu\"))\n# vgg_light.add(MaxPooling2D((2,2)))\n# vgg_light.add(Conv2D(512,(3,3),padding = \"same\",strides = 3,activation = \"relu\"))\n# # vgg_light.add(MaxPooling2D((2,2)))\n# vgg_light.add(Dropout(0.3))\n# vgg_light.add(Flatten())\n# vgg_light.add(Dense(128,activation = \"relu\"))\n# vgg_light.add(Dropout(0.2))\n# vgg_light.add(Dense(64,activation = \"relu\"))\n# vgg_light.add(Dropout(0.2))\n# vgg_light.add(Dense(14,activation = \"softmax\"))\n# # vgg_light.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light.compile(optimizer = \"adam\",loss = \"categorical_crossentropy\",metrics = [\"accuracy\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light.fit(X_train,Y_train,batch_size = 80,epochs = 30,validation_split = 0.25)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light_predict = vgg_light.predict(X_test)\nmodel_predict = model.predict(X_test)\n# model1_predict = model1.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light_predict.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# vgg_light_predict[5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df = pd.read_csv('../input/iwildcam-2019-fgvc6/sample_submission.csv')\nsubmission_df['Predicted'] = model_predict.argmax(axis=1)\n","execution_count":4,"outputs":[{"output_type":"error","ename":"NameError","evalue":"name 'model_predict' is not defined","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","\u001b[0;32m<ipython-input-4-7040b46143b8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0msubmission_df\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../input/iwildcam-2019-fgvc6/sample_submission.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0msubmission_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Predicted'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel_predict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mNameError\u001b[0m: name 'model_predict' is not defined"]}]},{"metadata":{"trusted":true},"cell_type":"code","source":"matched_dict = {0: 0,\n 1: 1,\n 2: 3,\n 3: 4,\n 4: 8,\n 5: 10,\n 6: 11,\n 7: 13,\n 8: 14,\n 9: 16,\n 10: 17,\n 11: 18,\n 12: 19,\n 13: 22}","execution_count":3,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submittable = model_predict\nfor i in range(submittable.shape[0]):\n    submittable[i] = matched_dict[submittable[i]]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(submission_df.shape)\nsubmission_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df.to_csv('submission_vgg_redefined.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.listdir()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# import the modules we'll need\nfrom IPython.display import HTML\nimport pandas as pd\nimport numpy as np\nimport base64\n\n# function that takes in a dataframe and creates a text link to  \n# download it (will only work for files < 2MB or so)\ndef create_download_link(df, title = \"Download CSV file\", filename = \"data.csv\"):  \n    csv = df.to_csv()\n    b64 = base64.b64encode(csv.encode())\n    payload = b64.decode()\n    html = '<a download=\"{filename}\" href=\"data:text/csv;base64,{payload}\" target=\"_blank\">{title}</a>'\n    html = html.format(payload=payload,title=title,filename=filename)\n    return HTML(html)\n\n# create a random sample dataframe\n# df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))\n\n# create a link to download the dataframe\ncreate_download_link(submission_df)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}