{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"92aac7cd-ac09-c2bb-d2af-c3a60e5a23c9"},"outputs":[],"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\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"f0b7c1a0-f382-1df0-ec1e-d3fdac21d923"},"outputs":[],"source":"import numpy as np\nnp.random.seed(2016)\n\nimport os\nimport glob\nimport cv2\nimport datetime\nimport pandas as pd\nimport time\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\nfrom sklearn.cross_validation import KFold\nfrom keras.models import Sequential\nfrom keras.layers.core import Dense, Dropout, Flatten\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D\nfrom keras.optimizers import SGD\nfrom keras.callbacks import EarlyStopping\n\nfrom sklearn.metrics import log_loss\nfrom keras import __version__ as keras_version\n%matplotlib inline\nfrom __future__ import division,print_function\nimport os, json\nfrom glob import glob\nimport numpy as np\nimport scipy\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.metrics import confusion_matrix\nnp.set_printoptions(precision=4, linewidth=100)\nfrom matplotlib import pyplot as plt\n\n\nfrom numpy.random import random, permutation\nfrom scipy import misc, ndimage\nfrom scipy.ndimage.interpolation import zoom\n\nimport keras\nfrom keras import backend as K\n\nfrom keras.models import Sequential\nfrom keras.layers import Input\nfrom keras.layers.core import Flatten, Dense, Dropout, Lambda\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D\nfrom keras.optimizers import SGD, RMSprop\nfrom keras.preprocessing import image"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"d6d8f28b-0e3b-348e-84b5-830def7371ac"},"outputs":[],"source":"X_train = []\nX_train_id = []\ny_train = []\ntart_time = time.time()\nprint('Read train images')\nfolders = ['Type_1', 'Type_2', 'Type_3']\nfor fld in folders:\n    index = folders.index(fld)\n    print (index)\n    print('Load folder {} (Index: {})'.format(fld, index))\n    path = os.path.join('..', 'input', 'train', fld, '*.jpg')\n    files = glob(path)\n    for o,fl in enumerate(files):\n        flbase = os.path.basename(fl)\n        img = cv2.imread(fl)\n        #print (type(img))\n        img = cv2.resize(img, (32,32))\n        X_train.append(img)\n        X_train_id.append(flbase)\n        y_train.append(index)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9282cdee-5d4b-c413-9ce3-8921e7b0a1e4"},"outputs":[],"source":"print (len(y_train),len(X_train)),len(X_train_id)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"53de1235-3ea6-f348-57fa-3944da22ee35"},"outputs":[],"source":""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"6d464e3a-646b-f688-f197-41624af12abb"},"outputs":[],"source":""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"4e065cd8-fc0b-c4a6-987f-055de5fde260"},"outputs":[],"source":"path = os.path.join('..', 'input', 'test', '*.jpg')\nfiles = sorted(glob(path))\nX_test = []\nX_test_id = []\nfor fl in files:\n    flbase = os.path.basename(fl)\n    img = cv2.imread(fl)\n    #print (type(img))\n    img = cv2.resize(img, (32,32))\n    X_test.append(img)\n    X_test_id.append(flbase)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a7d68cde-af51-8618-7cbe-57fbfd6b94ae"},"outputs":[],"source":"def create_model():\n    model = Sequential()\n    model.add(ZeroPadding2D((1, 1), input_shape=(3, 32, 32), dim_ordering='th'))\n    model.add(Convolution2D(4, 3, 3, activation='relu', dim_ordering='th'))\n    model.add(ZeroPadding2D((1, 1), dim_ordering='th'))\n    model.add(Convolution2D(4, 3, 3, activation='relu', dim_ordering='th'))\n    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), dim_ordering='th'))\n    model.add(ZeroPadding2D((1, 1), dim_ordering='th'))\n    model.add(Convolution2D(8, 3, 3, activation='relu', dim_ordering='th'))\n    model.add(ZeroPadding2D((1, 1), dim_ordering='th'))\n    model.add(Convolution2D(8, 3, 3, activation='relu', dim_ordering='th'))\n    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), dim_ordering='th'))\n    model.add(Flatten())\n    model.add(Dense(32, activation='relu'))\n    model.add(Dropout(0.5))\n    model.add(Dense(32, activation='relu'))\n    model.add(Dropout(0.5))\n    model.add(Dense(3, activation='softmax'))\n    \n    return model"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"b2c90f39-ffe5-90c1-f5de-3a182f5c4d1a"},"outputs":[],"source":"\"\"\"\ndef create_model():\n    model = Sequential()\n    \n    model.add(ZeroPadding2D((1, 1), input_shape=( 3, 32, 32), dim_ordering='th'))\n    \n    model.add(Convolution2D( 128, 3, 3, activation = 'relu', dim_ordering='th') )\n    \n    model.add(ZeroPadding2D((1, 1),  dim_ordering='th'))\n    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), dim_ordering='th'))\n                           \n    model.add(ZeroPadding2D((1, 1), dim_ordering='th'))\n    model.add(Convolution2D( 64, 3, 3, activation = 'relu', dim_ordering='th') )\n    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), dim_ordering='th'))\n    \n    model.add(ZeroPadding2D((1, 1), dim_ordering='th'))\n    model.add(Convolution2D( 128, 3, 3, activation = 'relu', dim_ordering='th') )\n  \n    \n    \n    model.add(Flatten())\n    \n    model.add(Dense(32, activation='relu'))\n   \n    model.add(Dropout(0.5))\n    model.add(BatchNormalization())\n    model.add(Dense(32, activation='relu'))\n    model.add(Dropout(0.5))\n    model.add(BatchNormalization())\n    model.add(Dense(3, activation='softmax'))\n              \n    return model\n    \n    \"\"\""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"3a4f76fd-decd-6b2b-c16f-22ea7a42a474"},"outputs":[],"source":""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"31e54e9a-eab1-1b72-c62a-d945866d49bf"},"outputs":[],"source":"from keras.layers.normalization import BatchNormalization\nmodel = create_model()"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"88bfe384-579c-62b1-2382-ee871df31e39"},"outputs":[],"source":"len(y_train)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"45c328a0-4bed-e177-f174-9e1e0bcd5767"},"outputs":[],"source":"from keras.utils.np_utils import to_categorical\ndef onehot(x):\n    return to_categorical(x,3)\n\nbatch_size = 64\nX_train = np.array(X_train).transpose((0, 3, 1, 2))\nX_train = X_train / 255.0\nfrom sklearn.cross_validation import train_test_split\nX_train1, X_valid, Y_train, Y_valid = train_test_split(X_train, y_train, test_size=0.2, random_state=42)\n\n\nY_train = onehot(Y_train)\nY_valid = onehot(Y_valid)\nnb_epoch = 10\n#opt = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)\n#model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"0cbbae15-f9b9-b1d9-1011-6ee8cc092207"},"outputs":[],"source":"sgd = SGD(lr=0.01)\nmodel.compile(optimizer=sgd, loss='categorical_crossentropy',\n    metrics=['accuracy'])\nmodel.fit(X_train1, Y_train, batch_size=batch_size, nb_epoch=16,\n              shuffle=True, verbose=2, validation_data=(X_valid, Y_valid))"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"12240a34-2a05-408b-c7d1-ac2d285e9b25"},"outputs":[],"source":"X_test = np.array(X_test).transpose((0, 3, 1, 2))\nX_test = X_test / 255.0\nprediction = model.predict(X_test)\nk=pd.DataFrame({'image_name':X_test_id,'Type_1':prediction[:,0],'Type_2':prediction[:,1],'Type_3':prediction[:,2]})\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"8db79328-c6cb-a3c4-2803-114ac57f71c5"},"outputs":[],"source":"k=pd.DataFrame({'image_name':X_test_id,'Type_1':prediction[:,0],'Type_2':prediction[:,1],'Type_3':prediction[:,2]})"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"7759eac4-8fc3-3c4f-b454-17d965dedc45"},"outputs":[],"source":"k"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"c5dd43a0-ac78-9c59-e095-4dbf9c27552e"},"outputs":[],"source":"k.to_csv('sub1.csv',index = False)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"16aee521-d877-7cc4-3990-8036f6fa234d"},"outputs":[],"source":"from IPython.display import FileLink\nFileLink('sub1.csv')"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"776c76c4-7963-6ad0-c3e3-dd242056f74c"},"outputs":[],"source":""}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"}},"nbformat":4,"nbformat_minor":0}