{"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":"!pip install efficientnet","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:56:13.749458Z","iopub.execute_input":"2022-03-16T00:56:13.749946Z","iopub.status.idle":"2022-03-16T00:56:23.460388Z","shell.execute_reply.started":"2022-03-16T00:56:13.749859Z","shell.execute_reply":"2022-03-16T00:56:23.459585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2 as cv\nimport numpy as np\nimport pandas as pd\nfrom efficientnet.keras import EfficientNetB7\nfrom keras.callbacks import LearningRateScheduler\nfrom keras.layers import Dense, Dropout, Flatten\nfrom keras.models import Sequential\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.utils.np_utils import to_categorical","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:33.394889Z","iopub.execute_input":"2022-03-16T00:57:33.395153Z","iopub.status.idle":"2022-03-16T00:57:33.399748Z","shell.execute_reply.started":"2022-03-16T00:57:33.395123Z","shell.execute_reply":"2022-03-16T00:57:33.399091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv(\"../input/mnist-in-csv/mnist_train.csv\")\ntest_df = pd.read_csv(\"../input/mnist-in-csv/mnist_test.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:40.609180Z","iopub.execute_input":"2022-03-16T00:57:40.609737Z","iopub.status.idle":"2022-03-16T00:57:45.516970Z","shell.execute_reply.started":"2022-03-16T00:57:40.609694Z","shell.execute_reply":"2022-03-16T00:57:45.516198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = train_df[\"label\"]\ny_test = test_df[\"label\"]\nX_train = train_df.drop(labels=[\"label\"], axis=1)\nX_test = test_df.drop(labels=[\"label\"], axis=1)\nX_train = X_train / 255.0\nX_test = X_test / 255.0\nX_train = X_train.values.reshape(-1, 28, 28, 1)\nX_test = X_test.values.reshape(-1, 28, 28, 1)\nX_train = np.array([cv.resize(img, (32, 32), interpolation=cv.INTER_CUBIC) for img in X_train])\nX_test = np.array([cv.resize(img, (32, 32), interpolation=cv.INTER_CUBIC) for img in X_test])\nX_train = X_train.reshape(-1, 32, 32, 1)\nX_test = X_test.reshape(-1, 32, 32, 1)\ny_train = to_categorical(y_train, num_classes=10)\ny_test = to_categorical(y_test, num_classes=10)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:45.518498Z","iopub.execute_input":"2022-03-16T00:57:45.518757Z","iopub.status.idle":"2022-03-16T00:57:47.197825Z","shell.execute_reply.started":"2022-03-16T00:57:45.518724Z","shell.execute_reply":"2022-03-16T00:57:47.196522Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_gen = ImageDataGenerator(rotation_range=10, zoom_range=0.1, width_shift_range=0.1, height_shift_range=0.1)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:47.199207Z","iopub.execute_input":"2022-03-16T00:57:47.199440Z","iopub.status.idle":"2022-03-16T00:57:47.206294Z","shell.execute_reply.started":"2022-03-16T00:57:47.199408Z","shell.execute_reply":"2022-03-16T00:57:47.204629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\neffnet_b7 = EfficientNetB7(weights=None, input_shape=(32, 32, 1), include_top=False)\nmodel.add(effnet_b7)\nmodel.add(Flatten())\nmodel.add(Dense(1024, activation=\"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(units=10, activation=\"softmax\"))\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:47.208387Z","iopub.execute_input":"2022-03-16T00:57:47.208701Z","iopub.status.idle":"2022-03-16T00:57:55.247006Z","shell.execute_reply.started":"2022-03-16T00:57:47.208664Z","shell.execute_reply":"2022-03-16T00:57:55.246278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"annealer = LearningRateScheduler(lambda x: 1e-3 * 0.95 ** x)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:55.248109Z","iopub.execute_input":"2022-03-16T00:57:55.248347Z","iopub.status.idle":"2022-03-16T00:57:55.252652Z","shell.execute_reply.started":"2022-03-16T00:57:55.248311Z","shell.execute_reply":"2022-03-16T00:57:55.251973Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=\"adam\", loss=\"categorical_crossentropy\", metrics=[\"accuracy\"])\nmodel.fit(data_gen.flow(X_train, y_train, batch_size=64), epochs=45, validation_data=(X_test, y_test), callbacks=[annealer])","metadata":{"execution":{"iopub.status.busy":"2022-03-16T00:57:55.254331Z","iopub.execute_input":"2022-03-16T00:57:55.254749Z","iopub.status.idle":"2022-03-16T01:00:10.717991Z","shell.execute_reply.started":"2022-03-16T00:57:55.254712Z","shell.execute_reply":"2022-03-16T01:00:10.715523Z"},"trusted":true},"execution_count":null,"outputs":[]}]}