{"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 numpy as np\nimport pandas as pd\nimport os\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\n\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras.preprocessing.image import load_img, img_to_array\nfrom tensorflow.python.keras.preprocessing.image import ImageDataGenerator\n\nfrom sklearn.metrics import classification_report, log_loss, accuracy_score\nfrom sklearn.model_selection import train_test_split\nfrom tqdm import tqdm","metadata":{"papermill":{"duration":5.579884,"end_time":"2021-04-25T07:07:55.709182","exception":false,"start_time":"2021-04-25T07:07:50.129298","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"directory = '../input/plant-pathology-2021-fgvc8/train_images/'\ndirectory2 = '../input/plant-pathology-2021-fgvc8/test_images/'","metadata":{"papermill":{"duration":0.022612,"end_time":"2021-04-25T07:07:55.749535","exception":false,"start_time":"2021-04-25T07:07:55.726923","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trainfile=[]\nfor file in os.listdir(directory):\n    trainfile+=[file]\nprint(len(trainfile))\n\ntestfile=[]\nfor file in os.listdir(directory2):\n    testfile+=[file]\nprint(len(testfile))","metadata":{"papermill":{"duration":0.15222,"end_time":"2021-04-25T07:07:55.917393","exception":false,"start_time":"2021-04-25T07:07:55.765173","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(trainfile[0:3])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train=pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ntrain","metadata":{"papermill":{"duration":0.022341,"end_time":"2021-04-25T07:07:55.99641","exception":false,"start_time":"2021-04-25T07:07:55.974069","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Name=train['labels'].unique()\nprint(train['labels'].unique())\nprint(train['labels'].nunique())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"N=[]\nfor i in range(len(Name)):\n    N+=[i]\n    \nmapping=dict(zip(Name,N)) \nreverse_mapping=dict(zip(N,Name)) \n\ndef mapper(value):\n    return reverse_mapping[value]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_imdata=[]\ntrain_imfile=[]\n\nfor im in tqdm(os.listdir(directory)):\n    image=load_img(os.path.join(directory,im), grayscale=False, color_mode='rgb', target_size=(60,60))\n    image=img_to_array(image)\n    image=image/255.0\n    train_imdata.append(image)\n    train_imfile.append(im)","metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","papermill":{"duration":14.785601,"end_time":"2021-04-25T07:08:10.798527","exception":false,"start_time":"2021-04-25T07:07:56.012926","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_imdata=[]\ntest_imfile=[]\n\nfor im in tqdm(os.listdir(directory2)):\n    image=load_img(os.path.join(directory2,im), grayscale=False, color_mode='rgb', target_size=(60,60))\n    image=img_to_array(image)\n    image=image/255.0\n    test_imdata.append(image)\n    test_imfile.append(im)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_num=[]\nfor item in train['labels']:\n    value=mapping[item]\n    label_num+=[value]\ntrain['label_num']=label_num\ntrain","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data=np.array(train_imdata)\nprint(data.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test=np.array(test_imdata)\nprint(test.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label0=[]\nfor item in train_imfile:\n    label0+=[train[train['image']==item].iloc[0,2]]\n#print(label0)\n\nlabels1=to_categorical(label0)\nlabels=np.array(labels1)\n#print(labels.shape)","metadata":{"papermill":{"duration":0.137825,"end_time":"2021-04-25T07:08:11.135337","exception":false,"start_time":"2021-04-25T07:08:10.997512","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trainx,testx,trainy,testy=train_test_split(data,labels,test_size=0.2,random_state=44)","metadata":{"papermill":{"duration":0.120415,"end_time":"2021-04-25T07:08:11.460311","exception":false,"start_time":"2021-04-25T07:08:11.339896","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(trainx.shape)\nprint(testx.shape)\nprint(trainy.shape)\nprint(testy.shape)","metadata":{"papermill":{"duration":0.027242,"end_time":"2021-04-25T07:08:11.506602","exception":false,"start_time":"2021-04-25T07:08:11.47936","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(horizontal_flip=True,vertical_flip=True,rotation_range=20,zoom_range=0.6,\n                        width_shift_range=0.2,height_shift_range=0.2,shear_range=0.1,fill_mode=\"nearest\")","metadata":{"papermill":{"duration":0.025748,"end_time":"2021-04-25T07:08:11.55027","exception":false,"start_time":"2021-04-25T07:08:11.524522","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"densenet_weights_path = '../input/densenet201/densenet201_notop.h5'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pretrained_model3 = tf.keras.applications.DenseNet201(input_shape=(60,60,3),include_top=False,weights=densenet_weights_path,pooling='avg')\npretrained_model3.trainable = False","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs3 = pretrained_model3.input\nx3 = tf.keras.layers.Dense(128, activation='relu')(pretrained_model3.output)\noutputs3 = tf.keras.layers.Dense(12, activation='softmax')(x3)\nmodel = tf.keras.Model(inputs=inputs3, outputs=outputs3)","metadata":{"papermill":{"duration":0.063718,"end_time":"2021-04-25T07:08:17.169902","exception":false,"start_time":"2021-04-25T07:08:17.106184","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])","metadata":{"papermill":{"duration":0.041368,"end_time":"2021-04-25T07:08:17.231582","exception":false,"start_time":"2021-04-25T07:08:17.190214","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"his=model.fit(datagen.flow(trainx,trainy,batch_size=16),validation_data=(testx,testy),epochs=30)","metadata":{"papermill":{"duration":369.170719,"end_time":"2021-04-25T07:14:26.422069","exception":false,"start_time":"2021-04-25T07:08:17.25135","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(testx)\npred=np.argmax(y_pred,axis=1)\nground = np.argmax(testy,axis=1)\nprint(classification_report(ground,pred))","metadata":{"papermill":{"duration":3.53915,"end_time":"2021-04-25T07:14:30.789745","exception":false,"start_time":"2021-04-25T07:14:27.250595","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"get_acc = his.history['accuracy']\nvalue_acc = his.history['val_accuracy']\nget_loss = his.history['loss']\nvalidation_loss = his.history['val_loss']\n\nepochs = range(len(get_acc))\nplt.plot(epochs, get_acc, 'r', label='Accuracy of Training data')\nplt.plot(epochs, value_acc, 'b', label='Accuracy of Validation data')\nplt.title('Training vs validation accuracy')\nplt.legend(loc=0)\nplt.figure()\nplt.show()","metadata":{"papermill":{"duration":0.995914,"end_time":"2021-04-25T07:14:32.648575","exception":false,"start_time":"2021-04-25T07:14:31.652661","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = range(len(get_loss))\nplt.plot(epochs, get_loss, 'r', label='Loss of Training data')\nplt.plot(epochs, validation_loss, 'b', label='Loss of Validation data')\nplt.title('Training vs validation loss')\nplt.legend(loc=0)\nplt.figure()\nplt.show()","metadata":{"papermill":{"duration":0.971858,"end_time":"2021-04-25T07:14:34.468705","exception":false,"start_time":"2021-04-25T07:14:33.496847","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"load_img(\"../input/plant-pathology-2021-fgvc8/test_images/85f8cb619c66b863.jpg\",target_size=(60,60))","metadata":{"papermill":{"duration":0.857299,"end_time":"2021-04-25T07:14:36.189773","exception":false,"start_time":"2021-04-25T07:14:35.332474","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image=load_img(\"../input/plant-pathology-2021-fgvc8/test_images/85f8cb619c66b863.jpg\",target_size=(60,60))\n\nimage=img_to_array(image) \nimage=image/255.0\nprediction_image=np.array(image)\nprediction_image= np.expand_dims(image, axis=0)","metadata":{"papermill":{"duration":0.887719,"end_time":"2021-04-25T07:14:37.940876","exception":false,"start_time":"2021-04-25T07:14:37.053157","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction=model.predict(prediction_image)\nvalue=np.argmax(prediction)\nmove_name=mapper(value)\n#print(prediction)\n#print(value)\nprint(\"Prediction is {}.\".format(move_name))","metadata":{"papermill":{"duration":1.22121,"end_time":"2021-04-25T07:14:41.900362","exception":false,"start_time":"2021-04-25T07:14:40.679152","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(test.shape)\nprediction2=model.predict(test)\nprint(prediction2.shape)\n\nPRED=[]\nfor item in prediction2:\n    value2=np.argmax(item)\n    name2=mapper(value2)\n    PRED+=[name2]","metadata":{"papermill":{"duration":2.585739,"end_time":"2021-04-25T07:14:45.326559","exception":false,"start_time":"2021-04-25T07:14:42.74082","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample=pd.read_csv('../input/plant-pathology-2021-fgvc8/sample_submission.csv')\nsample","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample['image']=test_imfile\nsample['labels']=PRED\nsubm=sample.sort_values('image').reset_index(drop=True)\nsubm.to_csv('submission.csv', index=False)\nsubm","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}