{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"collapsed":true},"cell_type":"code","source":"%pylab inline\n\nimport copy\nimport matplotlib.pyplot as plt\n\nfrom keras.datasets import mnist, cifar10\nfrom keras.models import Sequential\nfrom keras.layers.core import Dense, Dropout, Activation, Flatten, Reshape\nfrom keras.optimizers import SGD, RMSprop\nfrom keras.regularizers import l2\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D, AveragePooling2D\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, Lambda, Flatten\nfrom keras.optimizers import Adam ,RMSprop\nfrom keras.callbacks import EarlyStopping\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers.normalization import BatchNormalization\nfrom keras.utils.np_utils import to_categorical\n\nfrom PIL import Image\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport seaborn as sns\nsns.set(style='white', context='notebook', palette='deep')\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":3,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e4dd33c1d4a6834b832835b3e41c72e034741833","collapsed":true},"cell_type":"code","source":"# create the training & test sets, skipping the header row with [1:]\ntrain = pd.read_csv(\"../input/digit-recognizer/train.csv\")\nprint(train.shape)\ntrain.head()","execution_count":5,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"184438267387bb6f3b3e32b1b7d3f60e2487ed68","collapsed":true},"cell_type":"code","source":"test= pd.read_csv(\"../input/digit-recognizer/test.csv\")\nprint(test.shape)\ntest.head()","execution_count":6,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"158420979486d8541ea2d427cf73a4a18fdc831b","collapsed":true},"cell_type":"code","source":"X_train = (train.ix[:,1:].values).astype('float32') # all pixel values\ny_train = train.ix[:,0].values.astype('int32') # only labels i.e targets digits\nX_test = test.values.astype('float32')","execution_count":7,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50d9ed8592674abacae8bd7e605c11af0e1980b9","collapsed":true},"cell_type":"code","source":"X_train","execution_count":8,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3ea5e84704160b8a74803ccb397afe60c2dc8b7a","collapsed":true},"cell_type":"code","source":"y_train","execution_count":9,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"be4f0c0b16f6090206736e7a484187afd2a29475","collapsed":true},"cell_type":"code","source":"#Convert train datset to (num_images, img_rows, img_cols) format \nX_train = X_train.reshape(X_train.shape[0], 28, 28)\n\nfor i in range(0,9):\n    plt.subplot(330 + (i+1))\n    plt.imshow(X_train[i], cmap=plt.get_cmap('gray'))\n    plt.title(y_train[i]);","execution_count":10,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2304a4ed78511941992b03b627eb0fc65398494c","collapsed":true},"cell_type":"code","source":"#expand 1 more dimention as 1 for colour channel gray\nX_train = X_train.reshape(X_train.shape[0], 28, 28,1)\nX_train.shape","execution_count":11,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"77f4bda2f3302f4ac745fe2d686288074e034329","collapsed":true},"cell_type":"code","source":"X_test = X_test.reshape(X_test.shape[0], 28, 28,1)\nX_test.shape","execution_count":12,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"84ce445a06969590467e27ac45e87ab54c1a329a"},"cell_type":"code","source":"mean_px = X_train.mean().astype(np.float32)\nstd_px = X_train.std().astype(np.float32)\n\ndef standardize(x): \n    return (x-mean_px)/std_px","execution_count":13,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d70801d443bd723b3a2f1fc623f887181b0c63c6","collapsed":true},"cell_type":"code","source":"y_train= to_categorical(y_train)\nnum_classes = y_train.shape[1]\nnum_classes","execution_count":14,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4916e926d219da3f47abb30b1ab86886d319c3c9","collapsed":true},"cell_type":"code","source":"plt.title(y_train[9])\nplt.plot(y_train[9])\nplt.xticks(range(10));","execution_count":15,"outputs":[]},{"metadata":{"_uuid":"3ff1d69bff46abfbfc9bf77fbf34a82f9fdfa773"},"cell_type":"markdown","source":"# Lenet-5"},{"metadata":{"trusted":true,"_uuid":"5968385eb904e67daa87741d3e6b95c58ea89415","collapsed":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Convolution2D(6, 5, 5, border_mode='valid', input_shape = (28,28,1)))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Activation(\"sigmoid\"))\n\nmodel.add(Convolution2D(16, 5, 5, border_mode='valid'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Activation(\"sigmoid\"))\nmodel.add(Dropout(0.5))\n\nmodel.add(Convolution2D(120, 1, 1, border_mode='valid'))\n\nmodel.add(Flatten())\nmodel.add(Dense(84))\nmodel.add(Activation(\"sigmoid\"))\nmodel.add(Dense(10))\nmodel.add(Activation('softmax'))","execution_count":30,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a7e6299fc46312a25178d7f18701f3a56df07bb9","collapsed":true},"cell_type":"code","source":"model.summary()","execution_count":31,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"afc642a18c3ed57a42336d8444089b5fd663f9a7","collapsed":true},"cell_type":"code","source":"model.compile(optimizer=SGD(lr=0.8),loss='categorical_crossentropy',metrics=['accuracy'])","execution_count":32,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"c9b2bad785e392a8c94af6b63d0c3f9ce8c51f4a"},"cell_type":"code","source":"from keras.preprocessing import image\ngen = image.ImageDataGenerator()","execution_count":33,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"820defdfba45ce56f35f2602712beb035fa080c4"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.10, random_state=42)\nbatches = gen.flow(X_train, y_train, batch_size=64)\nval_batches=gen.flow(X_val, y_val, batch_size=64)","execution_count":34,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7c3fbad51045a574d75b88eb737e98101991c987","collapsed":true},"cell_type":"code","source":"history=model.fit_generator(batches, batches.n, nb_epoch=2,validation_data=val_batches, nb_val_samples=val_batches.n, verbose=1)","execution_count":35,"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}