{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install graphviz","execution_count":null,"outputs":[]},{"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\"))\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mplimg\nfrom matplotlib.pyplot import imshow\nimport tensorflow as tf\nimport pydot\nimport graphviz\n\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import OneHotEncoder\n\nfrom keras import layers\nfrom keras.preprocessing import image\nfrom keras.applications.imagenet_utils import preprocess_input\nfrom keras.layers import Input, Dense, Activation, BatchNormalization, Flatten, Conv2D\nfrom keras.layers import AveragePooling2D, MaxPooling2D, Dropout\nfrom keras.models import Model\nfrom keras.utils.vis_utils import plot_model\n\nimport keras.backend as K\nfrom keras.models import Sequential\nimport os\nprint(os.listdir(\"../input\"))\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\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":"df = pd.read_csv(\"../input/train.csv\")\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def prepimages(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},"cell_type":"code","source":"def prep_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},"cell_type":"code","source":"X = prepimages(df, df.shape[0], \"train\")\nX /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y, label_encoder = prep_labels(df['Id'])\ny.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(32, (7, 7), strides = (1, 1), name = 'conv0', input_shape = (100, 100, 3)))\n\nmodel.add(BatchNormalization(axis = 3, name = 'bn0'))\nmodel.add(Activation('relu'))\n\nmodel.add(MaxPooling2D((2, 2), name='max_pool'))\nmodel.add(Conv2D(64, (3, 3), strides = (1,1), name=\"conv1\"))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D((3, 3), name='max_pool2'))\n\nmodel.add(Flatten())\nmodel.add(Dense(500, activation=\"relu\", name='rl'))\nmodel.add(Dropout(0.7))\nmodel.add(Dense(y.shape[1], activation='softmax', name='sm'))\n\nmodel.compile(loss='categorical_crossentropy', optimizer=\"adam\", metrics=['accuracy'])\nplot_model(model, to_file='/kaggle/working/model.png')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(X, y, epochs=50,validation_split=0.2, batch_size=64, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['acc'])\nplt.title('Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.show()","execution_count":24,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_test=pd.read_csv(\"../input/sample_submission.csv\")\ndf_test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = prepimages(df_test, df_test.shape[0], \"test\")\nX /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = model.predict(np.array(X), verbose=1)\npredictions","execution_count":23,"outputs":[{"output_type":"stream","text":"7960/7960 [==============================] - 2s 219us/step\n","name":"stdout"},{"output_type":"execute_result","execution_count":23,"data":{"text/plain":"array([[0.00019954, 0.0001894 , 0.0001995 , ..., 0.00020718, 0.00021842,\n        0.00020862],\n       [0.0001935 , 0.00018184, 0.00019985, ..., 0.00020189, 0.0002203 ,\n        0.00021093],\n       [0.00019985, 0.00019119, 0.00019474, ..., 0.00020737, 0.0002152 ,\n        0.00021108],\n       ...,\n       [0.00020035, 0.00018614, 0.00020132, ..., 0.000206  , 0.0002125 ,\n        0.00021176],\n       [0.00020104, 0.00019335, 0.00019749, ..., 0.00019941, 0.00021346,\n        0.00021214],\n       [0.00019809, 0.00019361, 0.00019651, ..., 0.00020089, 0.00022183,\n        0.00021352]], dtype=float32)"},"metadata":{}}]}],"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}