Created
October 7, 2018 09:04
-
-
Save jkotra/59550171e5aa9f5d165b97db14f1a802 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "63f20fbe4d77dad662716a97d2da562ecb7553d9" | |
}, | |
"cell_type": "code", | |
"source": "import os\nimport keras\nimport numpy as np\nfrom keras.applications import mobilenet\nfrom keras.preprocessing.image import load_img\nfrom keras.preprocessing.image import img_to_array,ImageDataGenerator\nfrom keras.applications.imagenet_utils import decode_predictions\nimport matplotlib.pyplot as plt\nimport matplotlib.patches as mpatches\nimport selectivesearch\nimport skimage.io\n%matplotlib inline\nimport cv2\nimport tqdm", | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "Using TensorFlow backend.\n", | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "e526de8d72b691a86e72414680b148e6d02d89c4" | |
}, | |
"cell_type": "code", | |
"source": "img_data = []\nlabels = []\n\nfor label in tqdm.tqdm(os.listdir('../input/flickr47/Ktrain/')):\n for image in os.listdir('../input/flickr47/Ktrain/' + label):\n img_data.append(img_to_array(load_img('../input/flickr47/Ktrain/' + label + '/' + image,target_size=(224, 224))))\n labels.append(label)", | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "100%|██████████| 35/35 [00:18<00:00, 1.90it/s]\n", | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "34b340eb5911319652a8897148e29f2b052bb741" | |
}, | |
"cell_type": "code", | |
"source": "from sklearn.preprocessing import LabelEncoder\n\nlabenc = LabelEncoder()\n\nlabels_n = labenc.fit_transform(labels)", | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "ddac9e47272c85d732529af3745f1b593d03714c" | |
}, | |
"cell_type": "code", | |
"source": "from sklearn.model_selection import train_test_split\nX_train, X_val, Y_train, Y_val = train_test_split(img_data,labels_n,test_size=0.10,shuffle=True)", | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "b850d2bb43f6626147102a60de2dfe33414d55a2" | |
}, | |
"cell_type": "code", | |
"source": "from keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nY_train = to_categorical(Y_train, num_classes = 35)\n\nfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nY_val = to_categorical(Y_val, num_classes = 35)", | |
"execution_count": 5, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "223a36401eef97a61cfafa0432a705c12fd2b19f" | |
}, | |
"cell_type": "code", | |
"source": "X_train = np.array(X_train)\nY_train = np.array(Y_train)\nX_val = np.array(X_val)\nY_val = np.array(Y_val)", | |
"execution_count": 6, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "3836daeb4a78266154fd7907fd412ce300a6fd63" | |
}, | |
"cell_type": "code", | |
"source": "#Load the MobileNet model\nmnm = mobilenet.MobileNet(weights='imagenet',include_top=False,input_shape=X_train[0].shape)", | |
"execution_count": 44, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "1617ccbbd66b603329077bf8c32580dd2d870755" | |
}, | |
"cell_type": "code", | |
"source": "img_data[0].shape", | |
"execution_count": 30, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"execution_count": 30, | |
"data": { | |
"text/plain": "(224, 224, 3)" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "8cd06ec83667a0c3db30804ccd5ed644df62398f" | |
}, | |
"cell_type": "code", | |
"source": "# Freeze the layers except the last 4 layers\nfor layer in mnm.layers[:-4]:\n layer.trainable = False\n \nfor layer in mnm.layers:\n print(layer, layer.trainable) \n ", | |
"execution_count": 45, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "<tensorflow.python.keras.engine.input_layer.InputLayer object at 0x7fbf1ac24438> False\n<tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7fbf1ac24cf8> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf1ac24518> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1abc0278> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1abc0978> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf1ab8e278> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1abdb668> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1ab1ae48> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf1aac7fd0> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1aa67978> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1aa672b0> False\n<tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7fbf1aa1cbe0> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf1aa1ce10> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1979fc50> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1974eeb8> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf19774860> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf196f08d0> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf196f07b8> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf196a3cc0> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf196a3c88> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19628fd0> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf195fd7b8> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1957d828> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1957d710> False\n<tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7fbf1952dda0> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf1952df28> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf194b3d68> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19460668> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf19409a20> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf19381a90> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19381b38> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf193b5cf8> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf19354198> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19337978> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf1928e978> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf192119e8> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19211cf8> False\n<tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7fbf191dd198> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf191c0c50> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf19144ef0> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1917ba90> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf19130630> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf19098c50> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf19098cf8> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf1904afd0> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1906a2e8> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18ff37b8> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf18fa3a58> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18f27ba8> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18f27c50> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf18ed6e80> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18ef5978> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18e55cc0> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf18e2e9b0> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18dafb00> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18dafba8> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf18d62d68> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18d00208> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18ce3c18> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf18cb89e8> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18c3fa58> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18c3fd68> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf18bedcc0> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18b8b160> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18b6e940> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf18ac7940> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18a499b0> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18a49cc0> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf18a12160> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf18a78e10> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf189faeb8> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf1894e898> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf188d3908> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf188d37f0> False\n<tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7fbf188a10b8> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf18885b70> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1880ae48> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf18836748> False\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf187dea20> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1875bb70> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1875bc18> False\n<tensorflow.python.keras.layers.convolutional.DepthwiseConv2D object at 0x7fbf1870de48> False\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1872e278> False\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf186b4b70> True\n<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fbf18666cc0> True\n<tensorflow.python.keras.layers.normalization.BatchNormalization object at 0x7fbf1858cc88> True\n<tensorflow.python.keras.layers.advanced_activations.ReLU object at 0x7fbf1858cb00> True\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "4588425af37d28428f4383f75a9ca0574d7bdf07" | |
}, | |
"cell_type": "code", | |
"source": "from keras import models\nfrom keras import layers\nfrom keras import optimizers\n\ntopmodel = models.Sequential()\n \n# Add the base model\ntopmodel.add(mnm)\n\ntopmodel.add(layers.Flatten())\ntopmodel.add(layers.Dense(1024, activation='relu'))\ntopmodel.add(layers.Dropout(0.5))\ntopmodel.add(layers.Dense(35, activation='softmax'))\n\n", | |
"execution_count": 54, | |
"outputs": [ | |
{ | |
"output_type": "error", | |
"ename": "TypeError", | |
"evalue": "The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.training.Model object at 0x7fbf185bde48>", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-54-2123eb2d81b3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# Add the base model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mtopmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmnm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0mtopmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlayers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFlatten\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/keras/engine/sequential.py\u001b[0m in \u001b[0;36madd\u001b[0;34m(self, layer)\u001b[0m\n\u001b[1;32m 129\u001b[0m raise TypeError('The added layer must be '\n\u001b[1;32m 130\u001b[0m \u001b[0;34m'an instance of class Layer. '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 131\u001b[0;31m 'Found: ' + str(layer))\n\u001b[0m\u001b[1;32m 132\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuilt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 133\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_layers\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mTypeError\u001b[0m: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.training.Model object at 0x7fbf185bde48>" | |
] | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true, | |
"_uuid": "baf1a81bd4251455b2fe7bc71e03efdbb7cb02da" | |
}, | |
"cell_type": "code", | |
"source": "print(keras.__version__)", | |
"execution_count": 29, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "2.2.2\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": false, | |
"_uuid": "fb229cc77e7379549b693b8dbbe7c7a9fed1fdd9" | |
}, | |
"cell_type": "code", | |
"source": "train_datagen = ImageDataGenerator(\n rescale=1./255,\n rotation_range=20,\n width_shift_range=0.2,\n height_shift_range=0.2,\n horizontal_flip=True,\n fill_mode='nearest')\n\n\n\ntrain_datagen.fit(X_train)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": false, | |
"_uuid": "32212430cbadcce887a4c8011f886373c6519566" | |
}, | |
"cell_type": "code", | |
"source": "model.compile(loss='categorical_crossentropy',\n optimizer=optimizers.RMSprop(lr=1e-4),\n metrics=['acc'])\n# Train the model\nbatch_size = 5\nhistory = model.fit_generator(train_datagen.flow(X_train,Y_train, batch_size=batch_size),\n epochs = 50, validation_data = (X_val,Y_val), steps_per_epoch=X_train.shape[0] // batch_size)", | |
"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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment