{"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\n\n#image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n\n#read data\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\ny_train = train_df['labels'][0:10000]\ny_train = [classes.index(i) for i in y_train]\ny_train = keras.utils.to_categorical(y_train,12)\n#print(y_train)\ndel train_df['labels']\n\n#read list of image\nx_train = []\nfor e in train_df[\"image\"][0:10000]:\n    img = cv2.resize(cv2.imread(train_dir+e)/255,(112,112))\n    x_train.append(img)\n    if(len(x_train)%100 == 0):\n        print(len(x_train))\n\n#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))\n\n\n#train - validate split \nx_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size=0.2)\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-03T18:48:05.884211Z","iopub.execute_input":"2022-03-03T18:48:05.884568Z","iopub.status.idle":"2022-03-03T19:25:20.45387Z","shell.execute_reply.started":"2022-03-03T18:48:05.88452Z","shell.execute_reply":"2022-03-03T19:25:20.452891Z"},"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)\n\nmodel = Sequential()\nmodel.add(Conv2D(32, (3, 3), strides=1, padding=\"same\", activation=\"relu\", \n                 input_shape=(112, 112, 3)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(64, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(128, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Conv2D(256, (3, 3), strides=1, padding=\"same\", activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D((2, 2), strides=2, padding=\"same\"))\nmodel.add(Flatten())\nmodel.add(Dense(units=512, activation=\"relu\"))\nmodel.add(Dense(units=12, activation=\"softmax\"))\n\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-03-03T19:36:48.006871Z","iopub.execute_input":"2022-03-03T19:36:48.007166Z","iopub.status.idle":"2022-03-03T19:36:48.136541Z","shell.execute_reply.started":"2022-03-03T19:36:48.007135Z","shell.execute_reply":"2022-03-03T19:36:48.135348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Compiling the Model\n# model.compile(loss=\"categorical_crossentropy\", metrics=[\"accuracy\"])\nopt = keras.optimizers.Adam(learning_rate=0.000001)\nmodel.compile(loss='categorical_crossentropy', optimizer=opt, metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-03-03T19:36:51.410182Z","iopub.execute_input":"2022-03-03T19:36:51.411012Z","iopub.status.idle":"2022-03-03T19:36:51.422229Z","shell.execute_reply.started":"2022-03-03T19:36:51.410956Z","shell.execute_reply":"2022-03-03T19:36:51.421494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(\n    x_train,y_train,\n#     steps_per_epoch = 16769//32,\n    epochs=50,\n    validation_data = (x_valid, y_valid), \n#     validation_steps = 1863//32,\n#     workers = 8\n)","metadata":{"execution":{"iopub.status.busy":"2022-03-03T19:36:53.841261Z","iopub.execute_input":"2022-03-03T19:36:53.841904Z"},"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":[]}]}