{"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 in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nos.listdir(\"../input/\")\n\ndata=pd.read_csv('../input/train.csv')\n# Any results you write to the current directory are saved as output.","execution_count":39,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"importing the libraries required"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import keras\nfrom keras.models import Model, Sequential, model_from_json\nfrom keras.optimizers import SGD\nfrom keras.layers import Dense, Dropout, Flatten, Input\nfrom keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, concatenate,Activation\nfrom keras import regularizers\nimport numpy as np\nimport glob\nimport cv2\nimport numpy as np\nimport csv \nimport os\nfrom numpy import genfromtxt\nfrom sklearn import preprocessing\nfrom PIL import Image\nimport matplotlib.pyplot as plt","execution_count":40,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"function for inception module using keras "},{"metadata":{"trusted":true},"cell_type":"code","source":"def inception():\n    inputs = Input(shape=(28, 28,1))\n    input_img = Conv2D(32, (5,5), strides = (2,2), activation='relu')(inputs)\n    input_img = Conv2D(16, (3,3), activation='relu')(input_img)\n    \n    tower_4 = MaxPooling2D((3,3), strides=(2,2), padding='same')(input_img)\n    \n    tower_5 = Conv2D(16, (4,4), strides=(2,2), padding='same', activation='relu')(input_img)\n    \n    input_img = concatenate([tower_4, tower_5], axis = 3)\n    \n    tower_1 = AveragePooling2D((3,3), strides=(1,1), padding='same')(input_img)\n    tower_1 = Conv2D(4, (1,1), padding='same', activation='relu')(tower_1)\n    \n    tower_2 = Conv2D(4, (1,1), padding='same', activation='relu')(input_img)\n    tower_2 = Conv2D(4, (2,2), padding='same', activation='relu')(tower_2)\n    \n    tower_3 = Conv2D(4, (1,1), padding='same', activation='relu')(input_img)\n    tower_3 = Conv2D(4, (2,2), padding='same', activation='relu')(tower_3)\n    tower_3 = Conv2D(4, (2,2), padding='same', activation='relu')(tower_3)\n    \n    outputs = concatenate([tower_1, tower_2, tower_3], axis = 3)\n    \n    dense = MaxPooling2D((2, 2), strides=(2,2))(outputs)\n    dense = Flatten(name='flatten')(dense)\n    dense = Dense(128, activation='relu', name='dense_1')(dense)\n    dense = Dropout(0.5)(dense)\n    dense = Dense(10, name='dense_2')(dense)\n    \n    prediction = Activation('softmax', name='softmax')(dense)\n    \n    model = Model(input=inputs, output=prediction)\n    \n    return model\n    ","execution_count":41,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"function to remove nans from input data"},{"metadata":{"trusted":true},"cell_type":"code","source":"def line_check(line):\n    line=np.array(line)\n    tran=np.nan_to_num(line)\n    if tran.all()!=line.all():\n        print(1)\n    return tran\n    ","execution_count":42,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"data preprocessing"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train=list()\nY_train=list()\ni=0\nwith open('../input/train.csv') as csvfile: \n    mpg_data = csv.reader(csvfile)\n    for line in mpg_data:\n      if i==0:\n        i+=1\n      else:\n        r=list()\n        Y_train.append(int(line[0]))\n        for j in range(0,784,28):\n          a=line_check(np.array(list(map(int, line[1+j:29+j]))))\n          r.append(a)\n        X_train.append(r)","execution_count":43,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train=list()\nfor i in range(42000):\n  t=list()\n  t.append(X_train[i])\n  x_train.append(np.dstack(t))\n\nx_train=np.array(x_train)/255.0","execution_count":44,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(np.shape(x_train))\nplt.imshow(x_train[3].reshape(28,28))","execution_count":45,"outputs":[{"output_type":"stream","text":"(42000, 28, 28, 1)\n","name":"stdout"},{"output_type":"execute_result","execution_count":45,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7f1ec27b6240>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train=list()\nfor i in range(len(Y_train)):\n  r=list()\n  r.append(Y_train[i])\n  y_train.append(r)\n  \nenc = preprocessing.OneHotEncoder()\nenc.fit(y_train)\ny_transform= enc.transform(y_train).toarray()\ny_transform.shape\n  ","execution_count":46,"outputs":[{"output_type":"stream","text":"/opt/conda/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py:371: FutureWarning: The handling of integer data will change in version 0.22. Currently, the categories are determined based on the range [0, max(values)], while in the future they will be determined based on the unique values.\nIf you want the future behaviour and silence this warning, you can specify \"categories='auto'\".\nIn case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.\n  warnings.warn(msg, FutureWarning)\n","name":"stderr"},{"output_type":"execute_result","execution_count":46,"data":{"text/plain":"(42000, 10)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_transform=np.array(y_transform)\ny_transform=line_check(y_transform)","execution_count":47,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"starting the inception module"},{"metadata":{"trusted":true},"cell_type":"code","source":"model=inception()\nmodel.compile(loss=\"categorical_crossentropy\",optimizer=\"adam\",metrics=['accuracy'])","execution_count":48,"outputs":[{"output_type":"stream","text":"/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:32: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=Tensor(\"so...)`\n","name":"stderr"}]},{"metadata":{},"cell_type":"markdown","source":"training the inception module on input images"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit(x_train, y_transform,\n          batch_size=2000,\n          epochs=50,validation_data=(x_train, y_transform))","execution_count":49,"outputs":[{"output_type":"stream","text":"Train on 42000 samples, validate on 42000 samples\nEpoch 1/50\n42000/42000 [==============================] - 17s 397us/step - loss: 2.2648 - acc: 0.1492 - val_loss: 2.1563 - val_acc: 0.3238\nEpoch 2/50\n42000/42000 [==============================] - 17s 395us/step - loss: 1.8471 - acc: 0.3886 - val_loss: 1.1484 - val_acc: 0.7308\nEpoch 3/50\n42000/42000 [==============================] - 15s 362us/step - loss: 1.0432 - acc: 0.6529 - val_loss: 0.5791 - val_acc: 0.8408\nEpoch 4/50\n42000/42000 [==============================] - 15s 368us/step - loss: 0.6637 - acc: 0.7881 - val_loss: 0.3901 - val_acc: 0.8899\nEpoch 5/50\n42000/42000 [==============================] - 15s 366us/step - loss: 0.4864 - acc: 0.8504 - val_loss: 0.3036 - val_acc: 0.9097\nEpoch 6/50\n42000/42000 [==============================] - 15s 365us/step - loss: 0.3946 - acc: 0.8787 - val_loss: 0.2458 - val_acc: 0.9275\nEpoch 7/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.3373 - acc: 0.8976 - val_loss: 0.2079 - val_acc: 0.9378\nEpoch 8/50\n42000/42000 [==============================] - 16s 369us/step - loss: 0.2924 - acc: 0.9114 - val_loss: 0.1899 - val_acc: 0.9434\nEpoch 9/50\n42000/42000 [==============================] - 15s 368us/step - loss: 0.2642 - acc: 0.9210 - val_loss: 0.1665 - val_acc: 0.9482\nEpoch 10/50\n42000/42000 [==============================] - 15s 365us/step - loss: 0.2386 - acc: 0.9268 - val_loss: 0.1533 - val_acc: 0.9528\nEpoch 11/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.2190 - acc: 0.9348 - val_loss: 0.1385 - val_acc: 0.9574\nEpoch 12/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.2002 - acc: 0.9399 - val_loss: 0.1292 - val_acc: 0.9607\nEpoch 13/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.1897 - acc: 0.9426 - val_loss: 0.1222 - val_acc: 0.9629\nEpoch 14/50\n42000/42000 [==============================] - 15s 364us/step - loss: 0.1754 - acc: 0.9473 - val_loss: 0.1131 - val_acc: 0.9651\nEpoch 15/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.1661 - acc: 0.9509 - val_loss: 0.1074 - val_acc: 0.9677\nEpoch 16/50\n42000/42000 [==============================] - 15s 367us/step - loss: 0.1595 - acc: 0.9530 - val_loss: 0.1007 - val_acc: 0.9694\nEpoch 17/50\n42000/42000 [==============================] - 15s 367us/step - loss: 0.1525 - acc: 0.9547 - val_loss: 0.0993 - val_acc: 0.9694\nEpoch 18/50\n42000/42000 [==============================] - 16s 375us/step - loss: 0.1475 - acc: 0.9557 - val_loss: 0.0958 - val_acc: 0.9708\nEpoch 19/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.1422 - acc: 0.9565 - val_loss: 0.0922 - val_acc: 0.9723\nEpoch 20/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.1402 - acc: 0.9581 - val_loss: 0.0904 - val_acc: 0.9720\nEpoch 21/50\n42000/42000 [==============================] - 15s 364us/step - loss: 0.1335 - acc: 0.9606 - val_loss: 0.0866 - val_acc: 0.9731\nEpoch 22/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.1290 - acc: 0.9623 - val_loss: 0.0817 - val_acc: 0.9749\nEpoch 23/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.1275 - acc: 0.9623 - val_loss: 0.0783 - val_acc: 0.9763\nEpoch 24/50\n42000/42000 [==============================] - 15s 365us/step - loss: 0.1230 - acc: 0.9642 - val_loss: 0.0794 - val_acc: 0.9760\nEpoch 25/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.1205 - acc: 0.9649 - val_loss: 0.0777 - val_acc: 0.9764\nEpoch 26/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.1162 - acc: 0.9661 - val_loss: 0.0730 - val_acc: 0.9777\nEpoch 27/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.1135 - acc: 0.9656 - val_loss: 0.0716 - val_acc: 0.9788\nEpoch 28/50\n42000/42000 [==============================] - 15s 366us/step - loss: 0.1094 - acc: 0.9676 - val_loss: 0.0686 - val_acc: 0.9791\nEpoch 29/50\n42000/42000 [==============================] - 16s 369us/step - loss: 0.1076 - acc: 0.9683 - val_loss: 0.0680 - val_acc: 0.9795\nEpoch 30/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.1026 - acc: 0.9700 - val_loss: 0.0664 - val_acc: 0.9795\nEpoch 31/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.1011 - acc: 0.9696 - val_loss: 0.0654 - val_acc: 0.9801\nEpoch 32/50\n42000/42000 [==============================] - 15s 359us/step - loss: 0.0987 - acc: 0.9711 - val_loss: 0.0625 - val_acc: 0.9808\nEpoch 33/50\n42000/42000 [==============================] - 15s 365us/step - loss: 0.0957 - acc: 0.9720 - val_loss: 0.0612 - val_acc: 0.9803\nEpoch 34/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.0974 - acc: 0.9711 - val_loss: 0.0627 - val_acc: 0.9800\nEpoch 35/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0942 - acc: 0.9721 - val_loss: 0.0589 - val_acc: 0.9822\nEpoch 36/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0928 - acc: 0.9714 - val_loss: 0.0587 - val_acc: 0.9821\nEpoch 37/50\n42000/42000 [==============================] - 15s 362us/step - loss: 0.0925 - acc: 0.9725 - val_loss: 0.0575 - val_acc: 0.9829\nEpoch 38/50\n42000/42000 [==============================] - 16s 371us/step - loss: 0.0875 - acc: 0.9729 - val_loss: 0.0553 - val_acc: 0.9830\nEpoch 39/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.0862 - acc: 0.9744 - val_loss: 0.0559 - val_acc: 0.9828\nEpoch 40/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.0900 - acc: 0.9725 - val_loss: 0.0564 - val_acc: 0.9825\nEpoch 41/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0859 - acc: 0.9747 - val_loss: 0.0522 - val_acc: 0.9835\nEpoch 42/50\n42000/42000 [==============================] - 15s 359us/step - loss: 0.0848 - acc: 0.9749 - val_loss: 0.0515 - val_acc: 0.9842\nEpoch 43/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.0822 - acc: 0.9760 - val_loss: 0.0504 - val_acc: 0.9844\nEpoch 44/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0848 - acc: 0.9749 - val_loss: 0.0501 - val_acc: 0.9842\nEpoch 45/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0860 - acc: 0.9743 - val_loss: 0.0520 - val_acc: 0.9838\nEpoch 46/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0842 - acc: 0.9749 - val_loss: 0.0496 - val_acc: 0.9848\nEpoch 47/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0794 - acc: 0.9762 - val_loss: 0.0480 - val_acc: 0.9846\nEpoch 48/50\n42000/42000 [==============================] - 15s 361us/step - loss: 0.0789 - acc: 0.9763 - val_loss: 0.0472 - val_acc: 0.9855\nEpoch 49/50\n42000/42000 [==============================] - 16s 373us/step - loss: 0.0753 - acc: 0.9773 - val_loss: 0.0457 - val_acc: 0.9857\nEpoch 50/50\n42000/42000 [==============================] - 15s 363us/step - loss: 0.0730 - acc: 0.9777 - val_loss: 0.0448 - val_acc: 0.9856\n","name":"stdout"},{"output_type":"execute_result","execution_count":49,"data":{"text/plain":"<keras.callbacks.History at 0x7f1ec25abcf8>"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"preprocessing test data"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test=list()\ni=0\nwith open('../input/test.csv') as csvfile: \n    mpg_data = csv.reader(csvfile)\n    for line in mpg_data:\n      if i==0:\n        i+=1\n      else:\n        r=list()\n        for j in range(0,784,28):\n          r.append(list(map(int, line[0+j:28+j])))\n        X_test.append(r)","execution_count":50,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test=list()\nfor i in range(28000):\n  t=list()\n  t.append(X_test[i])\n  x_test.append(np.dstack(t))\n\nx_test=np.array(x_test)/255.0","execution_count":51,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(np.shape(x_test))\nplt.imshow(x_test[3].reshape(28,28))","execution_count":52,"outputs":[{"output_type":"stream","text":"(28000, 28, 28, 1)\n","name":"stdout"},{"output_type":"execute_result","execution_count":52,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7f1eb2c3e400>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"submitting the results as a csv file"},{"metadata":{"trusted":true},"cell_type":"code","source":"out = open('result.csv', \"w\")\nout.write(\"ImageId,Label\\n\")\nY_test=model.predict(x_test)\nrows =['']*len(Y_test)\nfor i in range(len(Y_test)):\n  rows[i]='%s,%s\\n' % (i+1,int(np.argmax(Y_test[i])))\nout.writelines(rows)\nout.close()","execution_count":53,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}