{"cells":[{"metadata":{"_uuid":"4a0aa288b342aa8a310a8e10baad17489b73f638"},"cell_type":"markdown","source":"# Notes:\n\n* Update params of Adam optimizer."},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport os\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mplimg\nfrom matplotlib.pyplot import imshow\n\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import OneHotEncoder\n\nfrom keras import layers\nfrom keras.preprocessing import image\nfrom keras.layers import Activation, Conv2D, Flatten, LSTM, Dense, Bidirectional, Input, Dropout, BatchNormalization, CuDNNLSTM, GRU, CuDNNGRU, Embedding, GlobalMaxPooling1D, GlobalAveragePooling1D, MaxPooling2D, AveragePooling2D\nfrom keras.models import Model\n\nimport keras.backend as K\nfrom keras.engine.topology import Layer\nfrom keras import initializers, regularizers, constraints\nfrom keras.models import Sequential\nfrom keras import optimizers\n\nfrom keras.metrics import categorical_accuracy, top_k_categorical_accuracy, categorical_crossentropy\nfrom keras.models import Sequential\nfrom keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint\nfrom keras.optimizers import Adam\nfrom keras.applications import MobileNet\nfrom keras.applications.mobilenet import preprocess_input\n\nimport warnings\nwarnings.simplefilter(\"ignore\", category=DeprecationWarning)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"os.listdir(\"../input/\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ca3621817516afa1800db30b7dd9134a956624ac"},"cell_type":"code","source":"train_df = pd.read_csv(\"../input/train.csv\")\ntrain_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"edf482438cae2d7a74afe7e67a37dfc53713679a"},"cell_type":"code","source":"def prepareImages(data, m, dataset):\n    print(\"Preparing images\")\n    X_train = np.zeros((m, 100, 100, 3))\n    count = 0\n    \n    for fig in data['Image']:\n        # Load images into images of size 100x100x3\n        img = image.load_img(\"../input/\"+dataset+\"/\"+fig, target_size=(100, 100, 3))\n        x = image.img_to_array(img)\n        x = preprocess_input(x)\n\n        X_train[count] = x\n        if (count%500 == 0):\n            print(\"Processing image: \", count+1, \", \", fig)\n        count += 1\n    \n    return X_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ca94d9003ddb7f2ad5a558e8fba6a330cb12438a"},"cell_type":"code","source":"def prepare_labels(y):\n    values = np.array(y)\n    label_encoder = LabelEncoder()\n    integer_encoded = label_encoder.fit_transform(values)\n    # print(integer_encoded)\n\n    onehot_encoder = OneHotEncoder(sparse=False)\n    integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)\n    onehot_encoded = onehot_encoder.fit_transform(integer_encoded)\n    # print(onehot_encoded)\n\n    y = onehot_encoded\n    # print(y.shape)\n    return y, label_encoder","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f60b5e6d5f77a62a9458c6f1c6a1b8b095d6b918"},"cell_type":"code","source":"X = prepareImages(train_df, train_df.shape[0], \"train\")\nX /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0b44231b41e3904c070b0cef334a3fe154fc38a0"},"cell_type":"code","source":"y, label_encoder = prepare_labels(train_df['Id'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cf5139fe4365fb46a27ed87c2fe7e0b926bb6bac"},"cell_type":"code","source":"y.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6a365ef15b794712aed2d94ecaa86ecdb8841875"},"cell_type":"code","source":"def top_5_accuracy(y_true, y_pred):\n    return top_k_categorical_accuracy(y_true, y_pred, k=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"243add8c4ac8d23d59429823dab97481dda15104"},"cell_type":"code","source":"# Build the model - VGG\ndef get_model():\n    model = Sequential()\n\n    model.add(Conv2D(64, (3, 3), activation = \"relu\", input_shape = (100, 100, 3)))\n    model.add(Dropout(0.625))\n    \n    model.add(Conv2D(64, (3, 3), activation = \"relu\"))\n    model.add(Dropout(0.625))\n    \n    model.add(Conv2D(64, (6, 6), activation = \"relu\"))\n    model.add(Dropout(0.625))\n    \n    model.add(Conv2D(64, (9, 9), activation = \"relu\"))\n    model.add(Dropout(0.625))\n    \n    model.add(MaxPooling2D(pool_size = (2,2)))\n    \n    model.add(Flatten())\n    model.add(Dense(128, activation = 'relu'))\n    model.add(Dropout(0.625))\n    model.add(Dense(64, activation = 'relu'))\n    model.add(BatchNormalization())\n    model.add(Dense(y.shape[1], activation = 'softmax'))\n\n    model.compile(loss='categorical_crossentropy', optimizer=Adam(lr = 0.001, decay = 1e-06), metrics=[categorical_crossentropy, categorical_accuracy, top_5_accuracy])\n\n    print(model.summary())\n\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"827d0bb743596aed7b1bca0458f8302553c31d6b"},"cell_type":"code","source":"model = get_model()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3ec046e79ca08616f87073942239d9aeab9aa942"},"cell_type":"code","source":"history = model.fit(X, y, epochs=100, batch_size=100, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6967d123c376d10f001fbcec13317730447c416c"},"cell_type":"code","source":"plt.plot(history.history['categorical_accuracy'])\nplt.title('Model categorical accuracy')\nplt.ylabel('categorical accuracy')\nplt.xlabel('Epoch')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fbda9cca04caf34776796a5693458409b716cf9d"},"cell_type":"code","source":"test = os.listdir(\"../input/test/\")\nprint(len(test))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e53a62ca57254e09d0032d357f7a8305b99394d3"},"cell_type":"code","source":"col = ['Image']\ntest_df = pd.DataFrame(test, columns=col)\ntest_df['Id'] = ''","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0e2f58507b8a27ffc61af2cbee4615975815d5c1"},"cell_type":"code","source":"X = prepareImages(test_df, test_df.shape[0], \"test\")\nX /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"54384ae0f759b56b3b2fb8a6aa611431cfa6f298"},"cell_type":"code","source":"predictions = model.predict(np.array(X), verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cda000099b4f588971e02e38e3eea0695ae92314"},"cell_type":"code","source":"for i, pred in enumerate(predictions):\n    test_df.loc[i, 'Id'] = ' '.join(label_encoder.inverse_transform(pred.argsort()[-5:][::-1]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2bdb9e0f91760997ce8930682940da4b422de0c4"},"cell_type":"code","source":"test_df.head(10)\ntest_df.to_csv('submission.csv', index=False)","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}