{"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":"# Load files","metadata":{"id":"MdSNt6UsohmV","papermill":{"duration":0.009298,"end_time":"2021-04-23T09:17:29.975786","exception":false,"start_time":"2021-04-23T09:17:29.966488","status":"completed"},"tags":[]}},{"cell_type":"code","source":"filename_train = '../input/Kannada-MNIST/train.csv'\nfilename_test  = '../input/Kannada-MNIST/test.csv'","metadata":{"id":"nJR4I9QckmUx","papermill":{"duration":0.021384,"end_time":"2021-04-23T09:17:30.006268","exception":false,"start_time":"2021-04-23T09:17:29.984884","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\ndf_train = pd.read_csv(filename_train)\ndf_test  = pd.read_csv(filename_test )","metadata":{"id":"xXaxzA10khl_","papermill":{"duration":6.61362,"end_time":"2021-04-23T09:17:36.628543","exception":false,"start_time":"2021-04-23T09:17:30.014923","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Reshape data","metadata":{"id":"2cZfqxCto3Jn","papermill":{"duration":0.008989,"end_time":"2021-04-23T09:17:36.647012","exception":false,"start_time":"2021-04-23T09:17:36.638023","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import tensorflow as tf\n\n# training data\nX_train = df_train.values[:, 1:].reshape((-1, 28, 28, 1)) / 255.\ny_train = tf.keras.utils.to_categorical(df_train.values[:, 0], 10)\n# test data\nX_test = df_test.values[:, 1:].reshape((-1, 28, 28, 1)) / 255.","metadata":{"id":"mGjv_atuk68I","papermill":{"duration":5.075654,"end_time":"2021-04-23T09:17:41.732052","exception":false,"start_time":"2021-04-23T09:17:36.656398","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modeling","metadata":{"id":"gYlh-Lshr8Zf","papermill":{"duration":0.009453,"end_time":"2021-04-23T09:17:41.751714","exception":false,"start_time":"2021-04-23T09:17:41.742261","status":"completed"},"tags":[]}},{"cell_type":"code","source":"input = tf.keras.layers.Input(shape=(28, 28, 1))\n\nx = input\nx = tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu')(x)\nx = tf.keras.layers.MaxPool2D()(x)\nx = tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu')(x)\nx = tf.keras.layers.MaxPool2D()(x)\nx = tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu')(x)\nx = tf.keras.layers.MaxPool2D()(x)\nx = tf.keras.layers.Dropout(0.2)(x)\n\nx = tf.keras.layers.Flatten()(x)\nx = tf.keras.layers.Dense(64, activation='relu')(x)\n\noutput = tf.keras.layers.Dense(10, activation='softmax')(x)\n\nmodel = tf.keras.models.Model(input, output)\nmodel.summary()","metadata":{"id":"Xtz7kQQblax5","outputId":"11d37023-e39a-4a23-8715-e9f7c14ffc47","papermill":{"duration":2.413238,"end_time":"2021-04-23T09:17:44.173695","exception":false,"start_time":"2021-04-23T09:17:41.760457","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])","metadata":{"id":"czO9BMKVnK_7","papermill":{"duration":0.025332,"end_time":"2021-04-23T09:17:44.209987","exception":false,"start_time":"2021-04-23T09:17:44.184655","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Learning","metadata":{"id":"jxaRRKXsvEGm","papermill":{"duration":0.008951,"end_time":"2021-04-23T09:17:44.228095","exception":false,"start_time":"2021-04-23T09:17:44.219144","status":"completed"},"tags":[]}},{"cell_type":"code","source":"image_data_generator = tf.keras.preprocessing.image.ImageDataGenerator(\n    rotation_range=30,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    validation_split=0.1)\nimage_data_generator.fit(X_train)","metadata":{"id":"xtHch_wBvGSk","papermill":{"duration":0.114871,"end_time":"2021-04-23T09:17:44.352166","exception":false,"start_time":"2021-04-23T09:17:44.237295","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = 100\nbatch_size = 64\n\n# コールバック関数を定義\ncallbacks = [\n    tf.keras.callbacks.EarlyStopping(patience=5, restore_best_weights=True)\n]\n\ntrain_generator = image_data_generator.flow(X_train, y_train, batch_size=batch_size, subset='training')\nvalid_generator = image_data_generator.flow(X_train, y_train, batch_size=batch_size, subset='validation')\n\nhistory = model.fit(train_generator,\n                    steps_per_epoch=train_generator.n // batch_size, \n                    validation_data=valid_generator,\n                    validation_steps=valid_generator.n // batch_size,\n                    epochs=epochs,\n                    callbacks=callbacks)","metadata":{"id":"7PscovXxncJT","outputId":"5ce7a552-ecfb-4479-b6fc-5584e7fe3546","papermill":{"duration":null,"end_time":null,"exception":false,"start_time":"2021-04-23T09:17:44.36192","status":"running"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{"id":"MPl4s92uobg7","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[]}},{"cell_type":"code","source":"y_pred = model.predict(X_test).argmax(axis=-1)","metadata":{"id":"Pk4HBTOnobF0","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\ny_pred = pd.DataFrame([np.arange(len(y_pred)), y_pred], index=['id', 'label']).T\ny_pred","metadata":{"id":"76eG3y3xpetf","outputId":"705b8f33-8d42-4053-f0d3-15a2da519dda","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filename_output = './submission.csv'\ny_pred.to_csv(filename_output, index=False)","metadata":{"id":"6XAT8MWpqlmo","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]}]}