{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom keras.models import load_model\nfrom keras.models import Sequential, Model, load_model, model_from_json\nfrom keras.layers.convolutional import Conv2D, UpSampling2D, Conv2DTranspose\nfrom keras.layers import ZeroPadding2D, Activation, BatchNormalization, MaxPooling2D, Dense, Add, Flatten, Concatenate\nfrom keras.layers.advanced_activations import LeakyReLU, PReLU\nfrom keras.layers import Input, Dropout\nfrom keras import losses\nfrom keras.optimizers import Adam, SGD\nfrom keras.utils import to_categorical\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_data = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\", header = 0)\ntest_data = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\", header = 0)\nkey = train_data.keys()\nkey2 = test_data.keys()\ntrain_labels = np.zeros((len(train_data[key[0]]), 10))\n#test_labels = np.zeros((len(test_data[key2[0]]), 10))\ntrain_images = np.zeros((len(train_data[key[0]]), 28, 28))\ntest_images = np.zeros((len(test_data[key2[0]]), 28, 28))\nfor i in range(len(train_data[key[0]])):\n    train_labels[i][train_data[key[0]][i]] = 1.0\n    image = np.zeros((len(key)-1))\n    for j in range(len(key)-1):\n        image[j] = train_data[\"pixel\"+str(j)][i]\n    img = image.reshape(1, 28, 28)\n    train_images[i] = img\n    \nfor i in range(len(test_data[key2[0]])):\n    #test_labels[i] = test_data[key2[0]][i]\n    image = np.zeros((len(key2)))\n    for j in range(len(key2)):\n        image[j] = test_data[\"pixel\"+str(j)][i]\n    img = image.reshape(1, 28, 28)\n    test_images[i] = img\n\"\"\"limit = len(train_data[key[0]])*0.2\nln = len(train_data[key[0]])\nval_images = train_images[int(ln-limit):].reshape(int(limit), 28, 28, 1)\nval_labels = train_labels[int(ln-limit):]\ntrain_images = train_images[:int(ln-limit)].reshape(int(ln-limit), 28, 28, 1)\ntrain_labels = train_labels[:int(ln-limit)]\nprint(\"Data Loaded\")\nprint(train_images.shape)\nprint(val_images.shape)\nprint(train_labels.shape)\nprint(val_labels.shape)\n\"\"\"\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def model():\n    inputs = layers.Input(shape=(28, 28, 1,))\n    x = layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu')(inputs)\n    x = layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu')(x)\n    x = layers.MaxPooling2D(pool_size=(2, 2))(x)\n    x = layers.BatchNormalization()(x)\n    x = layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu')(x)\n    x = layers.Conv2D(filters=128, kernel_size=(3,3), activation='relu')(x)\n    x = layers.MaxPooling2D(pool_size=(2, 2))(x)\n    x = layers.BatchNormalization()(x)\n    x = layers.Flatten()(x)\n    x = layers.Dense(72, activation=\"relu\")(x)\n    x = layers.Dense(48, activation=\"relu\")(x)\n    output = layers.Dense(10, activation=\"softmax\")(x)\n    model = keras.Model(inputs=inputs, outputs=output)\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = model()\nmodel.compile(optimizer=Adam(lr=0.0005), loss='categorical_crossentropy', metrics=['accuracy'])\nmodel.fit(train_images, train_labels, batch_size=32, epochs=500, shuffle=True, validation_split=0.2)\n#print(history.history)\nloss, acc = model.evaluate(train_images, train_labels)\nprint(\"loss: %.2f\" % loss)\nprint(\"acc: %.2f\" % acc)\n#loss, acc = model.evaluate(val_images, val_labels)\n#print(\"loss: %.2f\" % loss)\n#print(\"acc: %.2f\" % acc)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = model.predict(test_images)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(predictions.shape)\npred_val = []\nfor i in range(predictions.shape[0]):\n    pred_val.append([i+1, np.argmax(predictions[i])])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(pred_val)\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import csv\nfields = ['ImageId', 'Label']  \nwith open('mnist_submission.csv', 'w') as csvfile:\n    csvwriter = csv.writer(csvfile)\n    csvwriter.writerow(fields)\n    csvwriter.writerows(pred_val)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}