{"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\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nfrom sklearn.model_selection import train_test_split\n# 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\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\")\nprint(train.shape)\ntest = pd.read_csv(\"../input/test.csv\")\nprint(test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"35ed9516a1c2b073670497a320c5847b6b3d4273"},"cell_type":"code","source":"batch_size = 128\ntest_size = 256\nimg_size = 28\nX = train.iloc[:,1:].values.astype('float32') \nY = train.iloc[:,0].values.astype('int32')\nfrom keras.utils.np_utils import to_categorical\nY= to_categorical(Y)\nnum_classes = Y.shape[1]\nprint(num_classes)\n\nX_train,X_val,Y_train,Y_val = train_test_split(X,Y,test_size=0.1,random_state=42)\nX_test = test.values.astype('float32')\n\nX_train = X_train.reshape(-1,img_size,img_size,1)\nX_val = X_val.reshape(-1,img_size,img_size,1)\nX_test = X_test.reshape(-1,img_size,img_size,1)\nprint(X_test.shape)\n\nimg = X_test[5000]\nplt.imshow(img.reshape(28,28))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9be85b221a61a584767b27789c069c43e1df68bd"},"cell_type":"code","source":"def init_weights(shape):\n    return tf.Variable(tf.random_normal(shape, stddev=0.01))\ndef model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden):\n    conv1 = tf.nn.conv2d(X, w,strides=[1, 1, 1, 1],padding='SAME')\n    conv1_a = tf.nn.relu(conv1)\n    conv1 = tf.nn.max_pool(conv1_a, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='SAME')\n    conv1 = tf.nn.dropout(conv1, p_keep_conv)\n    conv2 = tf.nn.conv2d(conv1, w2,strides=[1, 1, 1, 1],padding='SAME')\n    conv2_a = tf.nn.relu(conv2)\n    conv2 = tf.nn.max_pool(conv2_a, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='SAME')\n    conv2 = tf.nn.dropout(conv2, p_keep_conv)\n    conv3=tf.nn.conv2d(conv2, w3,strides=[1, 1, 1, 1],padding='SAME')\n    conv3 = tf.nn.relu(conv3)\n    FC_layer = tf.nn.max_pool(conv3, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='SAME')\n    FC_layer = tf.reshape(FC_layer, [-1, w4.get_shape().as_list()[0]])\n    FC_layer = tf.nn.dropout(FC_layer, p_keep_conv)\n    output_layer = tf.nn.relu(tf.matmul(FC_layer, w4))\n    output_layer = tf.nn.dropout(output_layer, p_keep_hidden)\n    result = tf.matmul(output_layer, w_o)\n    return result\nx = tf.placeholder(\"float\",[None,img_size,img_size,1])\ny = tf.placeholder(\"float\",[None,num_classes])\nw = init_weights([3,3,1,32])\nw2= init_weights([3,3,32,64])\nw3 = init_weights([3,3,64,128])\nw4 = init_weights([128*4*4,625])\nw_o = init_weights([625,num_classes])\np_keep_conv = tf.placeholder(\"float\")\np_keep_hidden = tf.placeholder(\"float\")\n\npy_x = model(x,w,w2,w3,w4,w_o,p_keep_conv,p_keep_hidden)\nY_ = tf.nn.softmax_cross_entropy_with_logits(logits=py_x,labels=y)\ncost=tf.reduce_mean(Y_)\noptimizer = tf.train.RMSPropOptimizer(0.001,0.9).minimize(cost)\npredict_op = tf.argmax(py_x,1)\nprediction = []\n    \n    \n    \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"00b0063e3d449bedd6c5b8de93fd7d5e9c51dd1a"},"cell_type":"code","source":"def train():\n    with tf.Session() as sess:\n        tf.initialize_all_variables().run()\n        for i in range(100):\n            training_batch = zip(range(0,len(X_train),batch_size),range(batch_size,len(X_train)+1,batch_size))\n            for start, end in training_batch:\n                sess.run(optimizer, feed_dict={x: X_train[start:end],y: Y_train[start:end],p_keep_conv: 0.8,p_keep_hidden: 0.5})\n            #test_in = np.arange(len(X_test))\n            #test_in=test_in[0:test_size]\n        prediction.append(sess.run(predict_op,feed_dict={x:X_test,p_keep_conv: 1.0,p_keep_hidden: 1.0}))\ntrain() \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"992d8e2297c7fd1ccea159ae9ff41bbe6ba54d07"},"cell_type":"code","source":"pred = []\nfor item in prediction:\n    for i in item:\n        pred.append(i)\nprint(len(pred))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9d5b24e84c798303fe45f2c43893d853d4561450"},"cell_type":"code","source":"df_predictions = pd.DataFrame({'ImageId' : np.arange(len(pred))+1,\n                               'Label' : pred})\ndf_predictions.head(10)\ndf_predictions.to_csv('digit_recog_model.csv',index=False)","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}