{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Задание 2 по курсу \"Машинное обучение и анализ данных-1\"\n\n__Задача:__ обучить классификатор рукописных цифр на датасете MNIST.","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport seaborn as sns\n\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\n\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, Lambda, AveragePooling2D\nfrom keras.layers import Dense, Dropout, Flatten \nfrom keras.layers.normalization import BatchNormalization\n\nimport os\nprint(os.listdir('../input/digit-recognizer'))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/digit-recognizer/train.csv')\ntest = pd.read_csv('../input/digit-recognizer/test.csv')\n\nprint(train.shape, test.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = train.drop(columns=['label']).values\ny_train = train.label.values\n\nX_test = test.values","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train / 255.0\nX_test = X_test / 255.0","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train.reshape(-1,28,28,1)\nX_test = X_test.reshape(-1,28,28,1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(filters =64, kernel_size = (3,3), activation = 'relu', input_shape=(28,28,1)))\nmodel.add(AveragePooling2D(pool_size = (2,2)))\n\nmodel.add(Conv2D(filters =128, kernel_size = (3,3), activation = 'relu', input_shape=(28,28,1)))\nmodel.add(AveragePooling2D(pool_size = (2,2)))\n\nmodel.add(Conv2D(filters =128, kernel_size = (3,3), activation = 'relu', input_shape=(28,28,1)))\nmodel.add(AveragePooling2D(pool_size = (2,2)))\n\nmodel.add(Flatten())\nmodel.add(BatchNormalization())\nmodel.add(Dense(512,activation=\"relu\"))\nmodel.add(Dense(10,activation=\"softmax\"))\n\nprint(model.summary())\n\nmodel.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size = 128\nepochs =50","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X_train,y_train, batch_size = batch_size, validation_split = 0.2, epochs = epochs)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Готовим submission и отправляем в Kaggle","metadata":{}},{"cell_type":"code","source":"submission = pd.DataFrame({\n    'ImageId': np.arange(1, X_test.shape[0] + 1),\n    'Label': model.predict_classes(X_test, verbose = 1)\n})\nsubmission.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Промежуточные сабмиты именовать по правилу: `MLDA, <ФИО>, <краткое описание модели>`.\n\nУ итогового сабмита добавить слово `финальный` в конце.","metadata":{}},{"cell_type":"code","source":"#!kaggle competitions submit -c digit-recognizer -f submission.csv -m \"MLDA, Karaev A.T., minmax-normalization and 3conv+3averpooling layers\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}