{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimport pandas as pd\nfrom sklearn.preprocessing import LabelEncoder\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"label_data = pd.read_csv('../input/dog-breed-identification/labels.csv')\nlabel_data.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"labels = label_data['breed'].sort_values().unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"encoder = LabelEncoder()\nencoder.fit(label_data['breed'])\nlabel_data['breed'] = encoder.transform(label_data['breed'])\nlabel_data['breed'] = label_data['breed'].astype(str)\nlabel_data['id'] += '.jpg'\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"label_data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = '../input/dog-breed-identification/train'\ndatagen = ImageDataGenerator(rescale = 1/255., validation_split=0.2)\n\ntrain_generator = datagen.flow_from_dataframe(dataframe=label_data,\n                                             directory = train_dir,\n                                             x_col = 'id',\n                                             y_col = 'breed',\n                                             target_size=(150, 150),\n                                              class_mode='categorical',\n                                              batch_size=128,\n                                              subset='training'\n                                             )\nvalidation_generator = datagen.flow_from_dataframe(dataframe=label_data,\n                                             directory = train_dir,\n                                             x_col = 'id',\n                                             y_col = 'breed',\n                                             target_size=(150, 150),\n                                              class_mode='categorical',\n                                              batch_size=128,\n                                              subset='validation'\n                                             )\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.applications import VGG16","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"conv_base = VGG16(weights = 'imagenet', include_top = False, input_shape=(150, 150, 3))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\n\ndef extract_feature_label(generator):\n    features = np.zeros(shape=(generator.samples, 4, 4, 512))\n    labels = np.zeros(shape=(generator.samples, 120))\n    \n    i = 0\n    for input_batch, label_batch in generator:\n        features_batch = conv_base.predict(input_batch)\n        \n        i += 1\n        \n        if i < len(generator) - 1 :\n            features[i * 128 : (i + 1) * 128] = features_batch\n            labels[i * 128 : (i + 1) * 128] = label_batch\n            break\n        else :\n            features[i * 128 : ] = features_batch\n            labels[i * 128 : ] = labels_batch\n    \n    return features, labels\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_features, train_labels = extract_feature_label(train_generator)\nvalication_features, validation_labels = extract_feature_label(validation_generator)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nfrom tensorflow.keras import layers, models, optimizers\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = models.Sequential([\n    layers.Flatten(input_shape=(4,4, 512)),\n    layers.Dense(256, activation ='relu'),\n    layers.Dropout(0.5),\n    layers.Dense(120, activation='softmax')\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"checkpoint_filepath = 'dog-breed.h5'\n\nmodel_callback = tf.keras.callbaks.ModelCheckpoint()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', \n              optimizer=optimizers.RMSprop(lr=2e-5),\n              metrics='')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"history = model.fit(x=train_features, y = train_labels,\n            epochs = 50,\n            validation_data =(validation_features, validation_labels,"},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nacc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\n\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(epochs, acc, )","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}