{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import requests\nfrom bs4 import BeautifulSoup\nimport lxml\nimport os\nimport urllib\nimport sys\nimport pandas as pd\nimport numpy as np\nfrom PIL import Image\nimport cv2\nimport csv\nimport multiprocessing\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"os.listdir('../input/iwildcam-2019-fgvc6')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train=pd.read_csv(\"../input/iwildcam-2019-fgvc6/train.csv\")\ntest=pd.read_csv(\"../input/iwildcam-2019-fgvc6/test.csv\")\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(os.listdir('../input/iwildcam-2019-fgvc6/train_images'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(train.id)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img=[]\nfilename=train.id[:10000]\nlabel=train.category_id[:10000]\nfor file in filename:\n    image=cv2.imread(\"../input/iwildcam-2019-fgvc6/train_images/\"+file+'.jpg')\n    res=cv2.resize(image,(32,32))\n    img.append(res)\nimg=np.array(img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(15,15))\nfor i in range(9):\n    plt.subplot(3,3,i+1)\n    plt.imshow(img[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"np.random.seed(921)\nfrom keras.utils import np_utils\nfrom keras.models import Sequential\nfrom keras.layers import Convolution2D,Dense,MaxPool2D,Activation,Dropout,Flatten\nfrom keras.optimizers import Adam\nfrom sklearn.model_selection import train_test_split\nfrom keras.layers.normalization import BatchNormalization\nX_train,X_test,y_train,y_test=train_test_split(img,label,test_size=0.2)\ndel img\ny_train=y_train.astype(int)\ny_test=y_test.astype(int)\ny_train=np.array(y_train).reshape(-1,1)\ny_test=np.array(y_test).reshape(-1,1)\nX_train=X_train.reshape(-1,32,32,3)/255 #Normalize\nX_test=X_test.reshape(-1,32,32,3)/255\ny_train=np_utils.to_categorical(y_train,num_classes=max(label)+1)\ny_test=np_utils.to_categorical(y_test,num_classes=max(label)+1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model=Sequential()\nmodel.add(Convolution2D(filters=32,kernel_size=(3,3),input_shape=(32,32,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.35))\n\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Convolution2D(filters=64,kernel_size=(3,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.45))\n\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(1024,activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.75))\n\nmodel.add(Dense(max(label)+1,activation='softmax'))\n\nmodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n\ntrain_history=model.fit(X_train,y_train,validation_split=0.2,epochs=20,batch_size=128,verbose=1)\naccuracy=model.evaluate(X_test,y_test,verbose=1)\nprint(\"test accuracy:\",accuracy[1])#accuracy for test set\n\n\n\ndef show_train_history(train_history,train,validation):\n\tplt.plot(train_history.history[train])\n\tplt.plot(train_history.history[validation])\n\tplt.title('Train History')\n\tplt.ylabel('train')\n\tplt.xlabel('Epoch')\n\tplt.legend(['train','validation'],loc='upper left')\n\tplt.show()\n\nshow_train_history(train_history,'acc','val_acc') #acc:accuracy for training set. val_acc:accuracy for validation.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"prediction=model.predict_classes(X_test)\nprint(prediction[0:10])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_test=[]\nfilename_test=test.id[:10000]\nfor file in filename_test:\n    image=cv2.imread(\"../input/iwildcam-2019-fgvc6/test_images/\"+file+'.jpg')\n    res=cv2.resize(image,(32,32))\n    img_test.append(res)\nimg_test=np.array(img_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"prediction=model.predict_classes(img_test)\nprint(prediction[0:10])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submit=pd.DataFrame({'Id':filename_test,'Predicted':prediction})\nsubmit.to_csv('submission.csv',index=False)","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":1}