Skip to content

Instantly share code, notes, and snippets.

@jkotra
Created October 7, 2018 09:04
Show Gist options
  • Save jkotra/59550171e5aa9f5d165b97db14f1a802 to your computer and use it in GitHub Desktop.
Save jkotra/59550171e5aa9f5d165b97db14f1a802 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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