{"cells":[{"metadata":{"trusted":true,"_uuid":"b4ff92d6572b0c3717d2c42a14a48de12f25d591"},"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 \nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport keras\nfrom keras.applications.vgg19 import VGG19\nfrom keras.models import Model\nfrom keras.layers import Dense, Dropout, Flatten\n\nimport os\nfrom tqdm import tqdm\nfrom sklearn import preprocessing\nfrom sklearn.model_selection import train_test_split\nimport cv2\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.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f80e7115f26391e42b58c3aa6c79b082ab075943"},"cell_type":"code","source":"df_train = pd.read_csv('../input/labels.csv')\ndf_test = pd.read_csv('../input/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f6c0104f8739c9631adf63d83cf9f09fbde548b0"},"cell_type":"code","source":"df_train.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8858fc57ff2efad86939a707ffc7297311eb59e6"},"cell_type":"code","source":"targets_series = pd.Series(df_train['breed'])\none_hot = pd.get_dummies(targets_series, sparse = True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"efc23ad304009cc7b09473d960e7d00d5b6f1d79"},"cell_type":"code","source":"one_hot_labels = np.asarray(one_hot)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"60213ab3c5ee9528809b0395f15c3290ba08d50d"},"cell_type":"code","source":"im_size = 90\nx_train = []\ny_train = []\nx_test = []","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"228ef81658153ef37dbb3b38c3ba095cf222bc12"},"cell_type":"code","source":"i = 0 \nfor f, breed in tqdm(df_train.values):\n    img = cv2.imread('../input/train/{}.jpg'.format(f))\n    label = one_hot_labels[i]\n    x_train.append(cv2.resize(img, (im_size, im_size)))\n    y_train.append(label)\n    i += 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"0e91b4c7e8780f4741286b434d5bccb3854a2bcf"},"cell_type":"code","source":"for f in tqdm(df_test['id'].values):\n    img = cv2.imread('../input/test/{}.jpg'.format(f))\n    x_test.append(cv2.resize(img, (im_size, im_size)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ab9e3042b1123551cd4e5a7e41d17d69f9325e24"},"cell_type":"code","source":"y_train_raw = np.array(y_train, np.uint8)\nx_train_raw = np.array(x_train, np.float32) / 255.\nx_test  = np.array(x_test, np.float32) / 255.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ee2d9faa67bfbf2c9c2996f7ee6965996f511cf3"},"cell_type":"code","source":"print(x_train_raw.shape)\nprint(y_train_raw.shape)\nprint(x_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0741b19a9159d9f78aa339a9ac5608e2479b6b67"},"cell_type":"code","source":"num_class = y_train_raw.shape[1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fef1339cf4da9cf39780219eeaf30d80ed979714"},"cell_type":"code","source":"X_train, X_valid, Y_train, Y_valid = train_test_split(x_train_raw, y_train_raw, test_size=0.3, random_state=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"869d6b604a7921bf33c2316e21d79d6dac428fc1"},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Dense,Flatten,Dropout\nfrom keras.layers.convolutional import Conv2D,MaxPooling2D\nimport numpy as np\nseed = 7\nnp.random.seed(seed)\n \nmodel = Sequential()\nmodel.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(90,90,3),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(4096,activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(4096,activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(120,activation='softmax'))\nmodel.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f62ae78c6f5a0a21bfda8809c378376c4f8dc6d0"},"cell_type":"code","source":"model.fit(X_train, Y_train, epochs=1, validation_data=(X_valid, Y_valid), verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a7640923fa805fac02004d8bea49feec44e593b5"},"cell_type":"code","source":"preds = model.predict(x_test, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"610163e11e3a1fde6c808169060bf7f70b44c99d"},"cell_type":"code","source":"sub = pd.DataFrame(preds)\n# Set column names to those generated by the one-hot encoding earlier\ncol_names = one_hot.columns.values\nsub.columns = col_names\n# Insert the column id from the sample_submission at the start of the data frame\nsub.insert(0, 'id', df_test['id'])\nsub.head(5)","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}