{"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\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":"from keras.layers import Conv2D, MaxPooling2D, Dense, Dropout, Input, Flatten, Softmax\nfrom keras.models import Model\nfrom sklearn.model_selection import train_test_split\nfrom keras.optimizers import Adam","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"0f8ad4e3aa64c4dea1572d8a21b8e3823efc019c"},"cell_type":"code","source":"train_file = '../input/train.csv'\ntest_file = '../input/test.csv'\ntrain = pd.read_csv(train_file)\ntest = pd.read_csv(test_file)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"66ad17d052e85689e77aa0e21937598c2d66d6b2"},"cell_type":"code","source":"inputs = Input(shape=[28,28,1])\nnet = Conv2D(6, kernel_size=[3,3] , strides=[1,1], activation='relu', padding='same')(inputs)\nnet = MaxPooling2D((2,2), strides=(2,2), padding=\"valid\")(net)\nprint(net.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4b967a66d1d107a01725ca1d3de8ba7e391dca34"},"cell_type":"code","source":"net","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e3d53518f42dd4a49a45051a91fcbc933a2b94fd"},"cell_type":"code","source":"net = Conv2D(16, kernel_size=[5,5], strides=[1,1], activation='relu', padding='valid')(net)\nnet = MaxPooling2D()(net)\nprint(net.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ca94d091083d524e22a846a8993ccc4f90108e5c"},"cell_type":"code","source":"# net = Conv2D(64, kernel_size=[3,3] , strides=[1,1], activation='relu', padding='valid')(net)\n# net = MaxPooling2D()(net)\n# print(net.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b70ef898622094fb51ee1039c6d84c43f5bac834"},"cell_type":"code","source":"net = Conv2D(120, kernel_size=[5,5], strides=[1,1], activation='relu', padding='valid')(net)\nnet = Flatten()(net)\nnet = Dropout(rate=0.5)(net)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"655e7581f88bd005f630fcaa668470e4d32eb474"},"cell_type":"code","source":"net = Dense(84, activation='relu')(net)\nnet = Dropout(rate=0.5)(net)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d1f8b58ad4451e8e32e4f9e79876fe22f65ba050"},"cell_type":"code","source":"outputs = Dense(10, activation='softmax')(net)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":false,"_uuid":"602dd2c0addfded90bc072b70cc54cc96d0fedaf"},"cell_type":"code","source":"learn_rate = 0.001\nmodel = Model(inputs=inputs, outputs=outputs)\nmodel.compile(optimizer=Adam(lr=learn_rate),\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\nepochs = 20\nbatch_size = 128\nx_all_train =  np.array(train.drop(['label'], axis=1)).reshape((-1,28,28, 1))\ny_all_train = pd.get_dummies(train['label'])\nfor i in range(epochs):\n    num = int(train.shape[0]/batch_size)\n    for j in range(num):\n        train_batch = train.sample(n=batch_size)\n        x_train = np.array(train_batch.drop(['label'], axis=1)).reshape((-1,28,28, 1))\n        y_train = pd.get_dummies(train_batch['label'])\n        loss_and_metrics = model.train_on_batch(x_train, y_train)  # 开始训练\n        \n        if (j+1) % 100 == 0:\n            print(\"%dth_epoch: %d/%d\\nloss: %f\\nacuraccy:%f\"% (i, j+1, batch_size, loss_and_metrics[0], loss_and_metrics[1]))\n#     loss_and_metrics = model.evaluate(x_train, y_train)\n    loss_and_metrics = model.evaluate(x_all_train, y_all_train)\n    print(\"epoch: %d/%d\\nloss: %f\\nacuraccy:%f\\n\"% (i, num, loss_and_metrics[0], loss_and_metrics[1]))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0266d7b2c197038cd9ad307d0525454ea793c7e3"},"cell_type":"code","source":"x_test = np.array(test).reshape((-1,28,28,1))\ny_hat = model.predict(x_test)\ny_pred = np.argmax(y_hat, 1)\nres = pd.Series(y_pred, name=\"Label\")\nimgid = pd.Series(range(1, 28001), name=\"ImageId\")\nsubmission = pd.concat([imgid, res], axis=1)\nprint(submission[:10])\nsubmission.to_csv(\"mnist_sub.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"761c3a9e779f9afd54d60f669fd673d14b010136"},"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.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}