{"cells":[{"metadata":{"_uuid":"09dd321150fd819d5c674536b98d0d521f518a41"},"cell_type":"markdown","source":"InceptionV3  com Regularização + Data Augmentation + Dropout 0.5"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nnp.random.seed(2018)\n\n%matplotlib inline\nimport matplotlib.pyplot as plt\n\nimport keras\nfrom keras import regularizers\nfrom keras.applications.inception_v3 import InceptionV3\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\nfrom keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"df_train = pd.read_csv('../input/dog-breed-identification/labels.csv') # file with the names of the images and its breed for training\ndf_test = pd.read_csv('../input/dog-breed-identification/sample_submission.csv') # file with with the name of the images for testing","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a6fc5f438677c8ad783da1618fac2c4510d86f9e"},"cell_type":"code","source":"df_train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c147b6146f216187fd465a8de2701716188319df"},"cell_type":"code","source":"df_test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8c0ff263071b2786987e736c86c24f15dc94d38e"},"cell_type":"code","source":"targets_series = pd.Series(df_train['breed'])\none_hot = pd.get_dummies(targets_series, sparse = True)\none_hot_labels = np.asarray(one_hot)\nim_size = 197","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c6c764da19fcda82bdebad0d03967260b48c64ec"},"cell_type":"code","source":"x_train = []\ny_train = []\nx_test = []","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8280c6cc98d7ffd7909040b4f7a08cf1cc91add5"},"cell_type":"code","source":"i = 0 \nfor f, breed in tqdm(df_train.values):\n    img = cv2.imread('../input/dog-breed-identification/train/{}.jpg'.format(f))\n    x_train.append(cv2.resize(img, (im_size, im_size)))\n    label = one_hot_labels[i]\n    y_train.append(label)\n    i += 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"59ea882e32e44dd4567812f1bb4cd1a778ceb538"},"cell_type":"code","source":"del df_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1cfc988b3585ca5664141491dbc21da807c373c6"},"cell_type":"code","source":"for f in tqdm(df_test['id'].values):\n    img = cv2.imread('../input/dog-breed-identification/test/{}.jpg'.format(f))\n    x_test.append(cv2.resize(img, (im_size, im_size)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3e18c5f806ae766fbbb0f653afc8f427ad71316f"},"cell_type":"code","source":"num_class = 120","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7ce08e811cfe512d4280dfc0039a615aa54ca34e"},"cell_type":"code","source":"X_train, X_valid, Y_train, Y_valid = train_test_split(x_train, y_train, shuffle=True,  test_size=0.2, random_state=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"21f2a305b437c08c842db477ba6d792a00305769"},"cell_type":"code","source":"datagen = ImageDataGenerator(width_shift_range=0.2,\n                            height_shift_range=0.2,\n                            zoom_range=0.2,\n                            rotation_range=30,\n                            vertical_flip=False,\n                            horizontal_flip=True)\n\n\ndatagen.fit(X_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3de2940ef22fe035cc029117731401ca264c4ad0"},"cell_type":"code","source":"train_generator = datagen.flow(np.array(X_train), np.array(Y_train), \n                               batch_size=32) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dffb3f1a3e193530a7e8f959475a0b06263df214"},"cell_type":"code","source":"def create_my_model(optimizer):\n    base_model = InceptionV3(weights=\"imagenet\",include_top=False, input_shape=(im_size, im_size, 3))\n    dropout = base_model.output\n    dropout = Dropout(0.5)(dropout)\n    model_with_dropout = Model(inputs=base_model.input, outputs=dropout)\n    \n    x = base_model.output\n    x = Flatten()(x)\n    predictions = Dense(num_class, activation='softmax', \n                        kernel_regularizer=regularizers.l2(0.0015),\n                        activity_regularizer=regularizers.l1(0.0015))(x)\n    \n    \n    my_model = Model(inputs=base_model.input, outputs=predictions)\n    \n#     for layer in my_model.layers:\n#         layer.treinable = False\n    \n    my_model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])\n    return my_model\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b26e4db3567d4774623ed509bd2b70f19709b930"},"cell_type":"code","source":"def gerar_grafico(historia, titulo):\n    plt.plot(historia.history['acc'])\n    plt.plot(historia.history['val_acc'])\n    plt.title('Acurácia ' + titulo)\n    plt.ylabel('Acurácia')\n    plt.xlabel('Épocas')\n    plt.legend(['treino', 'validação'], loc='upper left')\n    plt.show()\n    plt.plot(historia.history['loss'])\n    plt.plot(historia.history['val_loss'])\n    plt.title('Loss ' + titulo)\n    plt.ylabel('Loss')\n    plt.xlabel('Épocas')\n    plt.legend(['treino', 'validação'], loc='upper left')\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a932cb3a5dd78797e56e272c3e8b44b7f2f1111c"},"cell_type":"code","source":"train_generator = datagen.flow(np.array(X_train), np.array(Y_train), batch_size=32) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"67cd676e5fcb811b6ebb0dbcd16d7a477d7a83f3"},"cell_type":"code","source":"model_rmsprop_com_regularizador = create_my_model(optimizer='rmsprop')\nmodel_sgd_com_regularizador = create_my_model(optimizer='sgd')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4b70976924f2c6430a828b0b5c44afdc40988584"},"cell_type":"code","source":"history_rmsprop_com_regularizador = model_rmsprop_com_regularizador.fit(\n    x=np.array(X_train), y=np.array(Y_train), epochs=10, batch_size=32,\n    validation_data=(np.array(X_valid), np.array(Y_valid)))\n\npreds = model_rmsprop_com_regularizador.predict(np.array(x_test), verbose=1)\n\ngerar_grafico(history_rmsprop_com_regularizador, \n              \"Inception with RMSprop and data augmentation\")\n\nsub = pd.DataFrame(preds)\ncol_names = one_hot.columns.values\nsub.columns = col_names\nsub.insert(0, 'id', df_test['id'])\nsub.head(5)\n\nsub.to_csv(\"predictions_resnet50_RMSProp.csv\")\n\nmodel_rmsprop_com_regularizador.save('resnet50_RMSProp.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0fe3f1653957e36665d19a96b13b6c5b13f5b352"},"cell_type":"code","source":"history_sgd_com_regularizador = model_sgd_com_regularizador.fit(\n    x=np.array(X_train), y=np.array(Y_train), epochs=10, batch_size=32,\n    validation_data=(np.array(X_valid), np.array(Y_valid)))\n\npreds = model_sgd_com_regularizador.predict(np.array(x_test), verbose=1)\n\ngerar_grafico(history_sgd_com_regularizador, \n              \"InceptionV3 with SGD and data augmentation\")\n\nsub = pd.DataFrame(preds)\ncol_names = one_hot.columns.values\nsub.columns = col_names\nsub.insert(0, 'id', df_test['id'])\nsub.head(5)\n\nsub.to_csv(\"predictions_resnet50_SGD.csv\")\n\nmodel_sgd_com_regularizador.save('predictions_resnet50_SGD.h5')","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}