{"cells":[{"metadata":{"_cell_guid":"04747140-25e9-422b-b987-6c5e91933cde","_uuid":"7267c0aa1cc29da8ecd1e901080ad4b01701dc64","trusted":false,"collapsed":true},"cell_type":"code","source":"from keras.layers import Dense,Dropout,Input,GlobalAveragePooling2D,MaxPooling2D\nfrom keras.models import Model\nfrom keras.applications.inception_v3 import InceptionV3 as pickleModel,preprocess_input\nfrom keras.losses import categorical_crossentropy\nfrom keras.optimizers import Adam,SGD\nfrom keras.preprocessing.image import img_to_array,load_img,ImageDataGenerator\nfrom keras.utils import to_categorical\nfrom PIL import Image\nimport pickle\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\npd.options.display.max_colwidth=150\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7dfb2451-b24c-4ce9-9bf0-2428f2c20c00","_uuid":"37155d7fc32efd63d4d2760d1f2ffcbf9cb4bd42","trusted":false,"collapsed":true},"cell_type":"code","source":"df1=pd.read_csv('../input/labels.csv')\ndf1.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"561e9970-65f5-41f7-8f15-904b8c8f8668","_uuid":"714827e17b1b73e3939e2cf593ed7b61c771b158","collapsed":true,"trusted":false},"cell_type":"code","source":"img_file='../input/train/'","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"ecb15ad9-642a-46a7-a50a-f2a0d922da6f","_uuid":"85e45da19edadb0507398c3eddc7d263608786a2","trusted":false,"collapsed":true},"cell_type":"code","source":"df2=df1.assign(img_path=lambda x: img_file + x['id'] +'.jpg')\ndf2.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"90582dc2-cbf4-4e3d-9865-20f0648cea03","_uuid":"dd45eddf52724cf31b7571226296760a20181e15","trusted":false,"collapsed":true},"cell_type":"code","source":"df2.breed.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"5dd2832e-baba-47a4-8e69-e7afeafd2e73","_uuid":"1f66bc9b96522e7aa939e78d05067f9b009b0f48","trusted":false,"collapsed":true},"cell_type":"code","source":"#Top 20 breed\ntop_20=list(df2.breed.value_counts()[0:20].index)\ntop_20","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"33b98c4d-f794-4dc3-9706-4cb99820c324","_uuid":"c2b51232202dec8b6a915f486111da9fb6e00dcc","trusted":false,"collapsed":true},"cell_type":"code","source":"df3=df2[df2.breed.isin(top_20)]\ndf3.shape","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a73be1e2-313c-479c-b492-26a70a0a9774","_uuid":"8398323df0e15ba9af6c2b34c76351cb651277b7","trusted":false,"collapsed":true},"cell_type":"code","source":"df=df3.copy()\ndf.shape","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"12fe9908-4441-48f9-8a78-9c41f5f03c6a","_uuid":"cac2d95368c4e63e398acb2753a38dd9517dcd41","trusted":false,"collapsed":true},"cell_type":"code","source":"%%time\nimg_pixel = np.array([np.array(Image.open(filename).resize((299,299))) for filename in df['img_path']])\nprint(img_pixel.shape)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"de198894-4582-4ece-85d1-f2f6fa1761fe","_uuid":"7cb7e94276b7876b9d94e7c9bfdf6783bae78acf","trusted":false,"collapsed":true},"cell_type":"code","source":"img_label=df.breed\nimg_label=pd.get_dummies(df.breed)\nimg_label.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"12c820e2-fdb6-4f63-a430-29d04e4eb30b","_uuid":"f561ea67bcea2ee12fce3b2e733f2c9407640a18","trusted":false,"collapsed":true},"cell_type":"code","source":"X=img_pixel\ny=img_label.values\nprint(X.shape)\nprint(y.shape)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"fb6f983e-16d0-4366-a5d0-8447d662f92c","_uuid":"60de50a24c8dde015af3120e7d5e1b6f10b40835","collapsed":true,"trusted":false},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"8d098c5f-f021-443e-8ba7-d9751b48d0c7","_uuid":"9fbeeb108dbab6bbce3cc067ecba09fea7605dca","trusted":false,"collapsed":true},"cell_type":"code","source":"inputshape=X_train[0].shape\nnum_class=len(y[0])\nprint(inputshape)\nprint(num_class)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"46f426dc-2603-4569-a111-2d901b6adb26","_uuid":"5b4c5da8b98d60ec84bdc7b86966129df4a0f48d","trusted":false,"collapsed":true},"cell_type":"code","source":"print(X_train.shape)\nprint(y_train.shape)\nprint(X_test.shape)\nprint(y_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"58dc9f89-fd86-41ba-8900-0bde951a59d0","_uuid":"8fdf5d505622bc44a60f7d5a98db87bd116274a2","trusted":false,"collapsed":true},"cell_type":"code","source":"num_train_sample=len(X_train)\nprint(num_train_sample)\nnum_test_sample=len(X_test)\nprint(num_test_sample)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"da4081af-e53a-4428-9739-b22f074c0142","_uuid":"5993743b5626503e4beb85e4251c3aa5858108e9","collapsed":true,"trusted":false},"cell_type":"code","source":"train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input,\n                                 rescale=1./255,\n                                 rotation_range=30, width_shift_range=0.2, \n                                 height_shift_range=0.2, shear_range=0.2, zoom_range=0.2,horizontal_flip=True\n                                )\ntest_datagen=ImageDataGenerator(preprocessing_function=preprocess_input,\n                               rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"e808abb0-591e-46d5-9f38-6847b8ff344f","_uuid":"82978704e5852abc29fe83dfcb6eb44dee51596a","trusted":false,"collapsed":true},"cell_type":"code","source":"%%time\ntraining_set=train_datagen.flow(X_train,y=y_train,batch_size=32)\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"2c4ba12c-070d-4e60-af98-03467195e7d7","_uuid":"fff37242f1d72e0832c3828fbfbf1978336d3c81","trusted":false,"collapsed":true},"cell_type":"code","source":"%%time\ntesting_set=test_datagen.flow(X_test,y=y_test,batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"d85ab41c-11a5-4f02-ac3a-f6e85031e472","_uuid":"f9a4646393e77cd5e2a9686d71ca63eb4bbc2c84","collapsed":true,"trusted":false},"cell_type":"code","source":"\n# base_model = pickleModel(weights = 'imagenet', include_top = False, input_shape=inputshape)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"ecc8e02d-a685-4bdd-bd38-486c99d471d4","_uuid":"1288986a015eeb5350e6ec4d92f6d158ac50a10e","collapsed":true,"trusted":false},"cell_type":"code","source":"# # Add a global spatial average pooling layer\n# x = base_model.output\n# x = GlobalAveragePooling2D()(x)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"758691d0-dd73-4b7c-9466-bbc9392f2be8","_uuid":"6b081d65461f14fec7e59caf60ed7016cd2086d3","collapsed":true,"trusted":false},"cell_type":"code","source":"# # Add a fully-connected layer and a logistic layer with 20 classes \n# #(there will be 120 classes for the final submission)\n# x = Dense(512, activation='relu')(x)\n# predictions = Dense(num_class, activation='softmax')(x)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"41099e3c-ab35-41e7-8d00-92597842e1d3","_uuid":"a53860e4aea8d6b9bdc8d8edd109b4851c426da8","collapsed":true,"trusted":false},"cell_type":"code","source":"# # The model we will train\n# model = Model(inputs = base_model.input, outputs = predictions)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a76c1d63-b22f-437c-89ed-a075ef8b930d","_uuid":"bdae04a2e0088fbf0e90021daf7e66d8e3b86f48","collapsed":true,"trusted":false},"cell_type":"code","source":"# # first: train only the top layers i.e. freeze all convolutional InceptionV3 layers\n# for layer in base_model.layers:\n#     layer.trainable = False","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a12396fb-a22e-4f14-8369-232d90f88fb6","_uuid":"7742bb14189feae525eededda20d107cd75af631","collapsed":true,"trusted":false},"cell_type":"code","source":"# # Compile with Adam\n# model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"ca788a06-5a93-4a95-a950-537a53270795","_uuid":"dcc77d082941263f6d089e707f9943572857d466","collapsed":true,"trusted":false},"cell_type":"code","source":"# history=model.fit_generator(training_set,\n#                       steps_per_epoch = num_train_sample//32,\n#                       validation_data = testing_set,\n#                       validation_steps = num_test_sample//32,\n#                       epochs = 1,\n#                       verbose = 1)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"60aaee93-8e27-4e9d-b3a3-e615723f8555","_uuid":"0503cf2f60d9c394fd39b005b7535f6ec5992d64","collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}