{"cells": [{"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", "\n", "import numpy as np # linear algebra"], "execution_count": null, "cell_type": "code", "metadata": {"_uuid": "29c27cef4efae4518a18efcd105d196de49ec70a", "collapsed": true, "_cell_guid": "e7737117-c7a4-42bb-977e-e6f6533199d5"}, "outputs": []}, {"source": ["\n", "import tensorflow as tf\n", "import pandas as pandas\n", "\n", "# import matplotlib.pyplot as plt\n", "\n", "# set up\n", "def load_data(file_name):\n", "    data = pandas.read_csv(file_name, sep=',')\n", "\n", "    features = data.iloc[:, 1:]\n", "    labels = data.iloc[:, :1]\n", "\n", "    return features, labels\n", "\n", "\n", "X, Y = load_data('../input/train.csv')\n", "print(X.shape)\n", "X_test = pandas.read_csv('../input/test.csv', sep=',')\n", "print(X_test.shape)\n", "\n", "\n", "\n", "class Model:\n", "\n", "    def __init__(self, sess, name, nb_classes):\n", "        self.sess = sess\n", "        self.name = name\n", "        self.nb_classes = nb_classes\n", "        self._build_net()\n", "\n", "    def _build_net(self):\n", "        with tf.variable_scope(self.name):\n", "            # dropout (keep_prob) rate  0.7~0.5 on training, but should be 1\n", "            # for testing\n", "            self.training = tf.placeholder(tf.bool)\n", "\n", "            # input place holders\n", "            self.X = tf.placeholder(tf.float32, [None, 784])\n", "\n", "            # img 28x28x1 (black/white), Input Layer\n", "            X_img = tf.reshape(self.X, [-1, 28, 28, 1])\n", "            self.Y = tf.placeholder(tf.int32, [None, 1])\n", "            Y_one_hot = tf.reshape(tf.one_hot(self.Y, self.nb_classes), [-1, self.nb_classes])\n", "\n", "            # Convolutional Layer #1\n", "            conv1 = tf.layers.conv2d(inputs=X_img, filters=32, kernel_size=[3, 3],\n", "                                     padding=\"SAME\", activation=tf.nn.relu)\n", "            # Pooling Layer #1\n", "            pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2],\n", "                                            padding=\"SAME\", strides=2)\n", "            dropout1 = tf.layers.dropout(inputs=pool1,\n", "                                         rate=0.7, training=self.training)\n", "\n", "            # Convolutional Layer #2 and Pooling Layer #2\n", "            conv2 = tf.layers.conv2d(inputs=dropout1, filters=64, kernel_size=[3, 3],\n", "                                     padding=\"SAME\", activation=tf.nn.relu)\n", "            pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2],\n", "                                            padding=\"SAME\", strides=2)\n", "            dropout2 = tf.layers.dropout(inputs=pool2,\n", "                                         rate=0.7, training=self.training)\n", "\n", "            # Convolutional Layer #2 and Pooling Layer #2\n", "            conv3 = tf.layers.conv2d(inputs=dropout2, filters=128, kernel_size=[3, 3],\n", "                                     padding=\"same\", activation=tf.nn.relu)\n", "            pool3 = tf.layers.max_pooling2d(inputs=conv3, pool_size=[2, 2],\n", "                                            padding=\"same\", strides=2)\n", "            dropout3 = tf.layers.dropout(inputs=pool3,\n", "                                         rate=0.7, training=self.training)\n", "\n", "            # Dense Layer with Relu\n", "            flat = tf.reshape(dropout3, [-1, 128 * 4 * 4])\n", "            dense4 = tf.layers.dense(inputs=flat,\n", "                                     units=625, activation=tf.nn.relu)\n", "            dropout4 = tf.layers.dropout(inputs=dense4,\n", "                                         rate=0.7, training=self.training)\n", "\n", "            # Logits (no activation) Layer: L5 Final FC 625 inputs -> 10 outputs\n", "            self.logits = tf.layers.dense(inputs=dropout4, units=self.nb_classes)\n", "\n", "        # define cost/loss & optimizer\n", "        self.cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n", "            logits=self.logits, labels=Y_one_hot))\n", "        self.optimizer = tf.train.AdamOptimizer(\n", "            learning_rate=learning_rate).minimize(self.cost)\n", "\n", "        correct_prediction = tf.equal(\n", "            tf.argmax(self.logits, 1), tf.argmax(Y_one_hot, 1))\n", "        self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", "\n", "    def predict(self, x_test, training=False):\n", "        return self.sess.run(tf.argmax(self.logits, 1),\n", "                             feed_dict={self.X: x_test, self.training: training})\n", "\n", "    def get_accuracy(self, x_test, y_test, training=False):\n", "        return self.sess.run(self.accuracy,\n", "                             feed_dict={self.X: x_test,\n", "                                        self.Y: y_test, self.training: training})\n", "\n", "    def train(self, x_data, y_data, training=True):\n", "        return self.sess.run([self.cost, self.optimizer], feed_dict={\n", "            self.X: x_data, self.Y: y_data, self.training: training})\n", "\n", "\n", "# hyper parameters\n", "learning_rate = 0.001\n", "training_epochs = 25\n", "batch_size = 100\n", "\n", "\n", "# initialize\n", "sess = tf.Session()\n", "m1 = Model(sess, \"m1\", 10)\n", "\n", "sess.run(tf.global_variables_initializer())\n", "\n", "print('Learning Started!')\n", "\n", "# train my model\n", "for epoch in range(training_epochs):\n", "    avg_cost = 0\n", "    total_batch = int(Y.shape[0] / batch_size)\n", "\n", "    for i in range(total_batch):\n", "        lower = i * batch_size\n", "        upper = (i + 1) * batch_size\n", "        batch_xs = X.iloc[lower: upper, :]\n", "        batch_ys = Y.iloc[lower: upper, :]\n", "        c, _ = m1.train(batch_xs, batch_ys)\n", "        avg_cost += c / total_batch\n", "\n", "    print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost))\n", "\n", "print('Learning Finished!')\n", "\n", "# Test model and check accuracy\n", "prediction = m1.predict(X_test)\n", "\n", "for index in range(len(prediction)):\n", "    print(index + 1, ', ', prediction[index])\n"], "execution_count": null, "cell_type": "code", "metadata": {"_uuid": "c56438f889f791449c698dbbae913be3ecf0f0fd", "_cell_guid": "26eec6f3-69be-4e87-a8ab-637d5e6516ea"}, "outputs": []}], "metadata": {"language_info": {"mimetype": "text/x-python", "codemirror_mode": {"version": 3, "name": "ipython"}, "file_extension": ".py", "nbconvert_exporter": "python", "name": "python", "pygments_lexer": "ipython3", "version": "3.6.1"}, "kernelspec": {"language": "python", "display_name": "Python 3", "name": "python3"}}, "nbformat": 4, "nbformat_minor": 1}