{"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 pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport tensorflow.keras as keras\nimport tensorflow.keras.layers as layers\nimport tensorflow.keras.optimizers as optimizers\nimport tensorflow.keras.losses as losses \nimport tensorflow.keras.callbacks as callbacks \nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport cv2","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv(\"data/train.csv\")\ntest_data = pd.read_csv(\"data/test.csv\").apply(lambda x: x/255)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_data = train_data.drop(\"label\", axis=1).apply(lambda x: x / 255).to_numpy().reshape(-1,28,28,1)\ny_train_data = tf.one_hot(train_data.label,10).numpy()\nX_test_data = test_data.apply(lambda x: x / 255).to_numpy().reshape(-1,28,28,1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"figure, axes = plt.subplots(5,10)\naxis: plt.Axes\nfor y, row in enumerate(axes):\n    for x, axis in enumerate(row):\n        axis.imshow(X_train_data[y*5+x], cmap=\"gray\")\n        axis.axis(\"off\")\nfigure.set_figwidth(20)\nfigure.set_figheight(10)\nfigure.set_facecolor(\"black\")\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_val, y_train, y_val = train_test_split(X_train_data, y_train_data,test_size=0.1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.Sequential()\nmodel.add(layers.Conv2D(64, (3,3), activation=\"relu\"))\nmodel.add(layers.MaxPool2D())\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Conv2D(64, (3,3), activation=\"relu\"))\nmodel.add(layers.MaxPool2D())\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(512,activation=\"relu\"))\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Dense(10,activation=\"softmax\"))\nmodel.build(X_train.shape)\nmodel.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"optimizer = optimizers.Adam()\nloss = losses.CategoricalCrossentropy()\nmodel.compile(optimizer, loss, metrics=['accuracy'])\nearly_stopping = callbacks.EarlyStopping(patience=16, restore_best_weights=True)\nmodel.fit(X_train, y_train, epochs=1000, callbacks=[early_stopping], validation_data=(X_val,y_val))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(X_val, y_val)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model.predict(test_data.to_numpy().reshape(-1,28,28,1))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result=[]\nfor id,labels in enumerate(prediction):\n    max = labels.max()\n    for i, v in enumerate(labels):\n        if v == max:\n            result.append([id+1,i])\n            break\nlen(result)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame(result).to_csv(\"data/submission.csv\", header=[\"ImageId\",\"Label\"], index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}