{"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 tensorflow.keras as keras\nimport pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nimport cv2\nfrom tqdm.notebook import tqdm\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport imagehash\nimport PIL\nimport os","metadata":{"execution":{"iopub.status.busy":"2022-03-21T14:57:08.848413Z","iopub.execute_input":"2022-03-21T14:57:08.848744Z","iopub.status.idle":"2022-03-21T14:57:14.721169Z","shell.execute_reply.started":"2022-03-21T14:57:08.848655Z","shell.execute_reply":"2022-03-21T14:57:14.720404Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#config\ntrain_dir = \"../input/plant-pathology-2021-fgvc8/train_images/\"\ntrain_df = pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\")\n\nclasses = ['scab frog_eye_leaf_spot', 'scab frog_eye_leaf_spot complex', 'complex', 'rust frog_eye_leaf_spot', \n           'powdery_mildew complex', 'powdery_mildew', 'frog_eye_leaf_spot complex', \n           'rust complex', 'rust', 'frog_eye_leaf_spot', 'scab', 'healthy']\n\npaths = train_df['image']\ny_train = train_df['labels']\ny_train = [classes.index(i) for i in y_train]\ny_train = keras.utils.to_categorical(y_train,12)\n\nclass CFG():\n    threshold = .9\n    img_size = 112\n    seed = 42","metadata":{"execution":{"iopub.status.busy":"2022-03-21T14:57:14.722674Z","iopub.execute_input":"2022-03-21T14:57:14.722957Z","iopub.status.idle":"2022-03-21T14:57:14.771397Z","shell.execute_reply.started":"2022-03-21T14:57:14.722911Z","shell.execute_reply":"2022-03-21T14:57:14.770739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#read list of image\nx_train = []\nfor path in tqdm(paths, total=len(paths)):\n    image = tf.io.read_file(os.path.join(train_dir, path))\n    image = tf.image.decode_jpeg(image, channels=3)\n    image = tf.image.resize(image, [112, 112])\n    image = tf.cast(image, tf.uint8).numpy()\n    x_train.append(image)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-17T19:39:15.540368Z","iopub.execute_input":"2022-03-17T19:39:15.540639Z","iopub.status.idle":"2022-03-17T20:12:25.2107Z","shell.execute_reply.started":"2022-03-17T19:39:15.540607Z","shell.execute_reply":"2022-03-17T20:12:25.209992Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#reshape\nx_train = np.array(x_train)\nx_train = x_train.reshape(-1,112,112,3)\n\nprint(len(x_train))\nprint(len(y_train))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\n\nfilehandler = open(\"x_train.pkl\",\"wb\") \npickle.dump(x_train,filehandler) \nfilehandler.close()","metadata":{"execution":{"iopub.status.busy":"2022-03-17T20:13:06.698365Z","iopub.execute_input":"2022-03-17T20:13:06.698617Z","iopub.status.idle":"2022-03-17T20:13:08.336229Z","shell.execute_reply.started":"2022-03-17T20:13:06.698588Z","shell.execute_reply":"2022-03-17T20:13:08.335464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\n\nfilehandler = open(\"../input/resizeddata/x_train2.pkl\",\"rb\") \nx_train = pickle.load(filehandler) \nfilehandler.close()","metadata":{"execution":{"iopub.status.busy":"2022-03-21T14:57:20.003173Z","iopub.execute_input":"2022-03-21T14:57:20.003914Z","iopub.status.idle":"2022-03-21T14:57:31.345565Z","shell.execute_reply.started":"2022-03-21T14:57:20.003873Z","shell.execute_reply":"2022-03-21T14:57:31.344767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nx_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:22:39.672653Z","iopub.execute_input":"2022-03-21T15:22:39.673035Z","iopub.status.idle":"2022-03-21T15:22:39.812457Z","shell.execute_reply.started":"2022-03-21T15:22:39.672996Z","shell.execute_reply":"2022-03-21T15:22:39.811708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train.shape","metadata":{"execution":{"iopub.status.busy":"2022-03-21T14:59:55.420945Z","iopub.execute_input":"2022-03-21T14:59:55.421825Z","iopub.status.idle":"2022-03-21T14:59:55.431605Z","shell.execute_reply.started":"2022-03-21T14:59:55.421761Z","shell.execute_reply":"2022-03-21T14:59:55.430752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Model\n\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import (\n    Dense,\n    Conv2D,\n    MaxPool2D,\n    Flatten,\n    Dropout,\n    BatchNormalization,  \n    RandomFlip,\n    RandomRotation,\n    InputLayer\n)\n\nmodel = Sequential()\nmodel.add(InputLayer(input_shape=(112, 112, 3)))\nmodel.add(RandomFlip(\"horizontal_and_vertical\")),\nmodel.add(RandomRotation(0.1)),\nmodel.add(Conv2D(32, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(64, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(64, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(128, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(128, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(256, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(256, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(512, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Flatten())\nmodel.add(BatchNormalization())\nmodel.add(Dense(units=512, activation=\"relu\"))\nmodel.add(Dense(units=12, activation=\"softmax\"))\n\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-03-21T14:59:59.618892Z","iopub.execute_input":"2022-03-21T14:59:59.619579Z","iopub.status.idle":"2022-03-21T15:00:02.28916Z","shell.execute_reply.started":"2022-03-21T14:59:59.619539Z","shell.execute_reply":"2022-03-21T15:00:02.288353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Compiling the Model\nopt = keras.optimizers.Adam(learning_rate=0.0001)\nmodel.compile(loss='categorical_crossentropy', optimizer=opt, metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:00:10.495167Z","iopub.execute_input":"2022-03-21T15:00:10.495438Z","iopub.status.idle":"2022-03-21T15:00:10.510648Z","shell.execute_reply.started":"2022-03-21T15:00:10.495407Z","shell.execute_reply":"2022-03-21T15:00:10.509829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(\n    x_train,y_train,\n    epochs=100,\n    validation_split = 0.2, \n)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:00:16.000407Z","iopub.execute_input":"2022-03-21T15:00:16.000688Z","iopub.status.idle":"2022-03-21T15:08:47.409355Z","shell.execute_reply.started":"2022-03-21T15:00:16.000657Z","shell.execute_reply":"2022-03-21T15:08:47.408649Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Evaluate on test data\")\nresults = model.evaluate(x_test, y_test, batch_size=128)\nprint(\"test loss, test acc:\", results)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:22:47.582611Z","iopub.execute_input":"2022-03-21T15:22:47.583166Z","iopub.status.idle":"2022-03-21T15:22:48.149106Z","shell.execute_reply.started":"2022-03-21T15:22:47.583125Z","shell.execute_reply":"2022-03-21T15:22:48.148285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\n#Create the prediction\npredictions = model.predict(x_test)\npredictions = np.argmax(predictions, axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:22:51.345352Z","iopub.execute_input":"2022-03-21T15:22:51.345825Z","iopub.status.idle":"2022-03-21T15:22:51.840209Z","shell.execute_reply.started":"2022-03-21T15:22:51.345771Z","shell.execute_reply":"2022-03-21T15:22:51.839222Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"con_mat = tf.math.confusion_matrix(np.argmax(y_test, axis=1), predictions, num_classes=12)\ncon_mat","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:29:40.227918Z","iopub.execute_input":"2022-03-21T15:29:40.228613Z","iopub.status.idle":"2022-03-21T15:29:40.244444Z","shell.execute_reply.started":"2022-03-21T15:29:40.22857Z","shell.execute_reply":"2022-03-21T15:29:40.24382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\nplt.figure(figsize = (13,10))\nsns.heatmap(con_mat, annot=True, cmap='twilight_shifted_r', fmt='g')","metadata":{"execution":{"iopub.status.busy":"2022-03-21T15:35:15.65934Z","iopub.execute_input":"2022-03-21T15:35:15.660023Z","iopub.status.idle":"2022-03-21T15:35:16.790775Z","shell.execute_reply.started":"2022-03-21T15:35:15.659982Z","shell.execute_reply":"2022-03-21T15:35:16.79Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#read test\ntest_df = pd.read_csv(\"../input/digit-recognizer/test.csv\")\n#get value in and store \nx_test = test_df.values\n\n# Normalize our image data\nx_test = x_test / 255\n\n#reshape\nx_test = x_test.reshape(-1,28,28,1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\n#Create the prediction\nprediction = model.predict(x_test)\nprediction = np.argmax(prediction, axis=1)\n\nprediction","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Submission\nsubmissions = pd.DataFrame({\"ImageId\": list(range(1,len(prediction)+1)),\n                         \"Label\": prediction})\n\nsubmissions.to_csv(\"submissions.csv\", index=False, header=True)\nsubmissions","metadata":{},"execution_count":null,"outputs":[]}]}