{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "21aa1443-e070-3c8a-ae01-830298ccaa03"
      },
      "source": [
        "Digits with vggnet + kfold"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "5d118c62-bb48-2754-e471-3d614d83753b"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import keras.layers.core as core\n",
        "import keras.layers.convolutional as conv\n",
        "import keras.models as models\n",
        "import keras.utils.np_utils as kutils\n",
        "\n",
        "from sklearn.model_selection import StratifiedKFold"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "0c94f7c4-2e17-62cc-75a8-89eeb772db7f"
      },
      "outputs": [],
      "source": [
        "train = pd.read_csv(\"../input/train.csv\").values\n",
        "test = pd.read_csv(\"../input/test.csv\").values"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "4c2bcfeb-10b5-e51f-e679-5a64e80eb724"
      },
      "outputs": [],
      "source": [
        "np_epoch = 10\n",
        "\n",
        "batch_size = 64\n",
        "img_rows, img_cols = 28, 28\n",
        "\n",
        "nb_filters_1 = 64\n",
        "nb_filters_2 = 128\n",
        "nb_filters_3 = 256\n",
        "nb_conv = 3\n",
        "\n",
        "n_folds = 3"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "86f73f48-2c6d-59d1-a863-2544c68bce88"
      },
      "outputs": [],
      "source": [
        "trainX = train[:,1:].reshape(train.shape[0],img_rows,img_cols,1)\n",
        "trainX = trainX.astype(float)\n",
        "trainX /= 255\n",
        "\n",
        "trainY = kutils.to_categorical(train[:,0])\n",
        "nb_classes = trainY.shape[1]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d5afd4c1-6083-9f16-ed39-e7df96fa7760",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "def create_model():\n",
        "    model = models.Sequential()\n",
        "    \n",
        "    model.add(conv.Conv2D(nb_filters_1, nb_conv, nb_conv,  activation=\"relu\", input_shape=(28, 28, 1), border_mode='same'))\n",
        "    model.add(conv.Conv2D(nb_filters_1, nb_conv, nb_conv, activation=\"relu\", border_mode='same'))\n",
        "    model.add(conv.MaxPooling2D(strides=(2,2)))\n",
        "\n",
        "    model.add(conv.Conv2D(nb_filters_2, nb_conv, nb_conv, activation=\"relu\", border_mode='same'))\n",
        "    model.add(conv.Conv2D(nb_filters_2, nb_conv, nb_conv, activation=\"relu\", border_mode='same'))\n",
        "    model.add(conv.MaxPooling2D(strides=(2,2)))\n",
        "    \n",
        "    model.add(core.Flatten())\n",
        "    model.add(core.Dropout(0.3))\n",
        "    model.add(core.Dense(128,activation='relu'))\n",
        "    model.add(core.Dense(nb_classes, activation=\"softmax\"))\n",
        "    \n",
        "    model.summary()\n",
        "    model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\",metrics=[\"accuracy\"])\n",
        "    \n",
        "    return model"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d4779e5f-63c6-4c7f-8bfa-a16098341c21",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "predict = []"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "bae20f13-c5e6-ba96-0aac-6f061f59ec5b",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "folding = StratifiedKFold(n_splits=n_folds,random_state=7,shuffle=True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "50cdf4a6-fc77-a513-2016-c87b69c49508"
      },
      "outputs": [],
      "source": [
        "for train_index, test_index in folding.split(trainX, [ i.argmax() for i in trainY]):\n",
        "    model = create_model()\n",
        "    model.fit(trainX[train_index], trainY[train_index], batch_size=batch_size, epochs=np_epoch,validation_data=(trainX[test_index],trainY[test_index]))\n",
        "\n",
        "    testX = test.reshape(test.shape[0], 28, 28, 1)\n",
        "    testX = testX.astype(float)\n",
        "    testX /= 255.0\n",
        "\n",
        "    predict.append(model.predict(testX))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d87ce1d4-23e4-dd1e-107d-e7eace7b978d",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "predict_ = predict"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "c4205539-3495-da5c-b15e-a9fe3dcc177f"
      },
      "outputs": [],
      "source": [
        "predict = [i.argmax() for i in (predict[0]+predict[1]+predict[2])]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "396ace10-2de7-a576-5a9c-2beeefad6003",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "np.savetxt('mnist-vggnet_aa.csv', np.c_[range(1,len(predict)+1),predict], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "dbcadb34-d488-15ae-6e40-27300f50c43e",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "b0f8c7e9-0e19-0814-7a7f-7d1e1145ad49",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "9536f0cf-fdfc-3991-7581-693e8e9e0341",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "0936acc8-4eda-b9a2-0fc0-e450570fa1f0",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "8dc6da89-8808-291b-57df-b39ebfd335a3",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "6102a136-aeb0-dcd6-7cf0-54c6aa688f4e",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "69d96438-70d5-3321-c48a-61d878a8b0aa",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}