Skip to content

Instantly share code, notes, and snippets.

@srsani
Created December 7, 2017 21:19
Show Gist options
  • Save srsani/85376349b2dfdede966c2f5ba23f143d to your computer and use it in GitHub Desktop.
Save srsani/85376349b2dfdede966c2f5ba23f143d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using cuDNN version 6021 on context None\n",
"Mapped name None to device cuda: Quadro P6000 (0000:03:00.0)\n",
"Using Theano backend.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"current folder: /home/sohrab/fast_ai/deeplearning1/nbs\n",
"\u001b[0m\u001b[01;32mchar-rnn.ipynb\u001b[0m* \u001b[01;32mlesson7.ipynb\u001b[0m*\r\n",
"color250_vgg16_finetune.ipynb \u001b[01;32mmnist.ipynb\u001b[0m*\r\n",
"\u001b[01;32mconvolution-intro.ipynb\u001b[0m* \u001b[01;34m__pycache__\u001b[0m/\r\n",
"\u001b[01;34mdata\u001b[0m/ \u001b[01;32mresnet50.py\u001b[0m*\r\n",
"\u001b[01;32mdogscats-ensemble.ipynb\u001b[0m* \u001b[01;32mrun.sh\u001b[0m*\r\n",
"\u001b[01;32mdogs_cats_redux.ipynb\u001b[0m* \u001b[01;32msgd-intro.ipynb\u001b[0m*\r\n",
"\u001b[01;32mimagenet_batchnorm.ipynb\u001b[0m* SRS_leason2.ipynb\r\n",
"\u001b[01;32minit.sh\u001b[0m* \u001b[01;32mstatefarm.ipynb\u001b[0m*\r\n",
"\u001b[01;32mlesson1.ipynb\u001b[0m* \u001b[01;32mstatefarm-sample.ipynb\u001b[0m*\r\n",
"\u001b[01;32mlesson2.ipynb\u001b[0m* \u001b[01;32mutils.py\u001b[0m*\r\n",
"\u001b[01;32mlesson3.ipynb\u001b[0m* \u001b[01;32mutils (srs's conflicted copy 2017-11-07).py\u001b[0m*\r\n",
"\u001b[01;32mlesson4.ipynb\u001b[0m* \u001b[01;32mvgg16bn.py\u001b[0m*\r\n",
"\u001b[01;32mlesson5.ipynb\u001b[0m* \u001b[01;32mvgg16.py\u001b[0m*\r\n",
"\u001b[01;32mlesson6.ipynb\u001b[0m* \u001b[01;32mwordvectors.ipynb\u001b[0m*\r\n"
]
}
],
"source": [
"# Rather than importing everything manually, we'll make things easy\n",
"# and load them all in utils.py, and just import them from there.\n",
"%matplotlib inline\n",
"import utils; \n",
"\n",
"import importlib\n",
"importlib.reload(utils)\n",
"\n",
"from PIL import ImageFile\n",
"ImageFile.LOAD_TRUNCATED_IMAGES = True\n",
"\n",
"def save_array(fname, arr): \n",
" c=bcolz.carray(arr, rootdir=fname, mode='w'); c.flush()\n",
"def load_array(fname):\n",
" return bcolz.open(fname)[:]\n",
"\n",
"from utils import *\n",
"current_dir = os.getcwd()\n",
"print ('current folder: ',current_dir)\n",
"\n",
"%ls"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from vgg16 import Vgg16\n",
"vgg = Vgg16()\n",
"model = vgg.model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"current_dir"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"val_batches = image.ImageDataGenerator().flow_from_directory(current_dir+'/data/redux/valid', \n",
" target_size=(224,224),\n",
" class_mode='categorical', \n",
" shuffle=False,\n",
" batch_size=1)\n",
"\n",
"batches = image.ImageDataGenerator().flow_from_directory(current_dir+'/data/redux/train', \n",
" target_size=(224,224),\n",
" class_mode='categorical', \n",
" shuffle=False,\n",
" batch_size=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"val_classes = val_batches.classes\n",
"trn_classes = batches.classes\n",
"\n",
"val_labels = np.array(OneHotEncoder().fit_transform(val_classes.reshape(-1,1)).todense())\n",
"trn_labels = np.array(OneHotEncoder().fit_transform(trn_classes.reshape(-1,1)).todense())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"batches = image.ImageDataGenerator().flow_from_directory(current_dir+'/data/redux/train', \n",
" target_size=(224,224),\n",
" class_mode=None, \n",
" shuffle=False,\n",
" batch_size=1)\n",
"trn_data = np.concatenate([batches.next() for i in range(batches.samples)])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"val_batches = image.ImageDataGenerator().flow_from_directory(current_dir+'/data/redux/valid', \n",
" target_size=(224,224),\n",
" class_mode=None, \n",
" shuffle=False,\n",
" batch_size=1)\n",
"val_data = np.concatenate([val_batches.next() for i in range(val_batches.samples)])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# save_array(current_dir+'/data/redux/model/train_data.bc', trn_data)\n",
"# save_array(current_dir+'/data/redux/model/valid_data.bc', val_data)\n",
"\n",
"# save_array(current_dir+'/data/redux/model/trn_labels.bc', trn_labels)\n",
"# save_array(current_dir+'/data/redux/model/val_labels.bc', val_labels)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"trn_data = load_array(current_dir+'/data/redux/model/train_data.bc')\n",
"val_data = load_array(current_dir+'/data/redux/model/valid_data.bc')\n",
"\n",
"trn_labels = load_array(current_dir+'/data/redux/model/trn_labels.bc')\n",
"val_labels = load_array(current_dir+'/data/redux/model/val_labels.bc')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Use the VGG 16 and an extra model make prediction: \n",
"Now that we have all the tanning and validation data as well as their corresponding labels we are going to use the VGG16 model and predict which category they are from all the 1000 categories that this model can predict. \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"trn_features = model.predict(trn_data, batch_size=64)\n",
"val_features = model.predict(val_data, batch_size=64)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"trn_features.shape, val_features.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# save_array(current_dir+'/data/redux/model/train_lastlayer_features.bc', trn_features)\n",
"# save_array(current_dir+'/data/redux/model/valid_lastlayer_features.bc', val_features)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"trn_features = load_array(current_dir+'/data/redux/model/train_lastlayer_features.bc')\n",
"val_features = load_array(current_dir+'/data/redux/model/valid_lastlayer_features.bc')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# 1000 inputs, since that's the saved features, and 2 outputs, for dog and cat\n",
"lm = Sequential([ Dense(2, activation='softmax', input_shape=(1000,)) ])\n",
"lm.compile(optimizer=RMSprop(lr=0.1), loss='categorical_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"batch_size=128\n",
"lm.fit(trn_features, trn_labels, epochs=100, batch_size=batch_size, \n",
" validation_data=(val_features, val_labels))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lm.optimizer.lr = 0.0001\n",
"batch_size=128\n",
"lm.fit(trn_features, trn_labels, epochs=100, batch_size=batch_size, \n",
" validation_data=(val_features, val_labels))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Modifying the model"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"lambda_1 (Lambda) (None, 3, 224, 224) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_1 (Conv2D) (None, 64, 224, 224) 1792 \n",
"_________________________________________________________________\n",
"zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 64, 224, 224) 36928 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_3 (Conv2D) (None, 128, 112, 112) 73856 \n",
"_________________________________________________________________\n",
"zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_4 (Conv2D) (None, 128, 112, 112) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_5 (Conv2D) (None, 256, 56, 56) 295168 \n",
"_________________________________________________________________\n",
"zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_6 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_7 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_8 (Conv2D) (None, 512, 28, 28) 1180160 \n",
"_________________________________________________________________\n",
"zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_9 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_10 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_11 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_12 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_13 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7) 0 \n",
"_________________________________________________________________\n",
"flatten_1 (Flatten) (None, 25088) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 4096) 102764544 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 4096) 16781312 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_3 (Dense) (None, 1000) 4097000 \n",
"=================================================================\n",
"Total params: 138,357,544\n",
"Trainable params: 138,357,544\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"vgg.model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model.pop()\n",
"for layer in model.layers: \n",
" layer.trainable=False\n",
"model.add(Dense(2, activation='softmax'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"batch_size=128\n",
"batches = image.ImageDataGenerator().flow(trn_data, trn_labels, batch_size=batch_size, shuffle=True)\n",
"val_batches = image.ImageDataGenerator().flow(val_data, val_labels, batch_size=batch_size, shuffle=False)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"lambda_1 (Lambda) (None, 3, 224, 224) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_1 (Conv2D) (None, 64, 224, 224) 1792 \n",
"_________________________________________________________________\n",
"zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 64, 224, 224) 36928 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_3 (Conv2D) (None, 128, 112, 112) 73856 \n",
"_________________________________________________________________\n",
"zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_4 (Conv2D) (None, 128, 112, 112) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_5 (Conv2D) (None, 256, 56, 56) 295168 \n",
"_________________________________________________________________\n",
"zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_6 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_7 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_8 (Conv2D) (None, 512, 28, 28) 1180160 \n",
"_________________________________________________________________\n",
"zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_9 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_10 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_11 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_12 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_13 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7) 0 \n",
"_________________________________________________________________\n",
"flatten_1 (Flatten) (None, 25088) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 4096) 102764544 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 4096) 16781312 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_4 (Dense) (None, 2) 8194 \n",
"=================================================================\n",
"Total params: 134,268,738\n",
"Trainable params: 8,194\n",
"Non-trainable params: 134,260,544\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"opt = RMSprop(lr=0.001)\n",
"vgg.model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n",
"vgg.model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/2\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.1304 - acc: 0.9641 - val_loss: 0.0356 - val_acc: 0.9860\n",
"Epoch 2/2\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0922 - acc: 0.9770 - val_loss: 0.0481 - val_acc: 0.9860\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7f8766938860>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vgg.model.fit_generator(batches, \n",
" epochs = 2, \n",
" validation_data = val_batches)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training multiple layers in Keras without compiling:\n",
"\n",
"This is the same approach as the class notebook."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"layers = model.layers\n",
"# Get the index of the first dense layer...\n",
"first_dense_idx = [index for index,layer in enumerate(layers) if type(layer) is Dense][0]\n",
"# ...and set this and all subsequent layers to trainable\n",
"for layer in layers[first_dense_idx:]: \n",
" layer.trainable=True"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sohrab/anaconda3/lib/python3.5/site-packages/keras/engine/training.py:973: UserWarning: Discrepancy between trainable weights and collected trainable weights, did you set `model.trainable` without calling `model.compile` after ?\n",
" 'Discrepancy between trainable weights and collected trainable'\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"180/180 [==============================] - 109s 603ms/step - loss: 0.0831 - acc: 0.9789 - val_loss: 0.0374 - val_acc: 0.9875\n",
"Epoch 2/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0844 - acc: 0.9789 - val_loss: 0.0477 - val_acc: 0.9880\n",
"Epoch 3/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0857 - acc: 0.9793 - val_loss: 0.0480 - val_acc: 0.9860\n",
"Epoch 4/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0810 - acc: 0.9807 - val_loss: 0.0485 - val_acc: 0.9865\n",
"Epoch 5/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0837 - acc: 0.9807 - val_loss: 0.0434 - val_acc: 0.9875\n",
"Epoch 6/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0810 - acc: 0.9800 - val_loss: 0.0546 - val_acc: 0.9855\n",
"Epoch 7/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0874 - acc: 0.9807 - val_loss: 0.0543 - val_acc: 0.9855\n",
"Epoch 8/10\n",
"180/180 [==============================] - 109s 607ms/step - loss: 0.0770 - acc: 0.9821 - val_loss: 0.0538 - val_acc: 0.9865\n",
"Epoch 9/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0790 - acc: 0.9821 - val_loss: 0.0541 - val_acc: 0.9880\n",
"Epoch 10/10\n",
"180/180 [==============================] - 109s 606ms/step - loss: 0.0841 - acc: 0.9821 - val_loss: 0.0558 - val_acc: 0.9865\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7f83c71a75f8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vgg.model.fit_generator(batches, \n",
" epochs = 10, \n",
" validation_data = val_batches)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"lambda_1 (Lambda) (None, 3, 224, 224) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_1 (Conv2D) (None, 64, 224, 224) 1792 \n",
"_________________________________________________________________\n",
"zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 64, 224, 224) 36928 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_3 (Conv2D) (None, 128, 112, 112) 73856 \n",
"_________________________________________________________________\n",
"zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_4 (Conv2D) (None, 128, 112, 112) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_5 (Conv2D) (None, 256, 56, 56) 295168 \n",
"_________________________________________________________________\n",
"zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_6 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_7 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_8 (Conv2D) (None, 512, 28, 28) 1180160 \n",
"_________________________________________________________________\n",
"zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_9 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_10 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_11 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_12 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_13 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7) 0 \n",
"_________________________________________________________________\n",
"flatten_1 (Flatten) (None, 25088) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 4096) 102764544 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 4096) 16781312 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_4 (Dense) (None, 2) 8194 \n",
"=================================================================\n",
"Total params: 134,268,738\n",
"Trainable params: 119,554,050\n",
"Non-trainable params: 14,714,688\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"vgg.model.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training multiple layers in Keras WITH compiling:\n",
"\n",
"So I added a compile to remove the warning and realized that the loss increased dramatically and the model cannot produces a satisfactory result with only few epochs. \n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"opt = RMSprop(lr=0.001)\n",
"vgg.model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/2\n",
"180/180 [==============================] - 110s 610ms/step - loss: 8.0629 - acc: 0.4998 - val_loss: 7.9704 - val_acc: 0.5055\n",
"Epoch 2/2\n",
"180/180 [==============================] - 111s 615ms/step - loss: 8.0674 - acc: 0.4995 - val_loss: 7.9704 - val_acc: 0.5055\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7f83c721d080>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vgg.model.fit_generator(batches, \n",
" epochs = 2, \n",
" validation_data = val_batches)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"lambda_1 (Lambda) (None, 3, 224, 224) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_1 (Conv2D) (None, 64, 224, 224) 1792 \n",
"_________________________________________________________________\n",
"zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226) 0 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 64, 224, 224) 36928 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_3 (Conv2D) (None, 128, 112, 112) 73856 \n",
"_________________________________________________________________\n",
"zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114) 0 \n",
"_________________________________________________________________\n",
"conv2d_4 (Conv2D) (None, 128, 112, 112) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_5 (Conv2D) (None, 256, 56, 56) 295168 \n",
"_________________________________________________________________\n",
"zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_6 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58) 0 \n",
"_________________________________________________________________\n",
"conv2d_7 (Conv2D) (None, 256, 56, 56) 590080 \n",
"_________________________________________________________________\n",
"max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_8 (Conv2D) (None, 512, 28, 28) 1180160 \n",
"_________________________________________________________________\n",
"zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_9 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30) 0 \n",
"_________________________________________________________________\n",
"conv2d_10 (Conv2D) (None, 512, 28, 28) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14) 0 \n",
"_________________________________________________________________\n",
"zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_11 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_12 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_13 (Conv2D) (None, 512, 14, 14) 2359808 \n",
"_________________________________________________________________\n",
"max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7) 0 \n",
"_________________________________________________________________\n",
"flatten_1 (Flatten) (None, 25088) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 4096) 102764544 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 4096) 16781312 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_4 (Dense) (None, 2) 8194 \n",
"=================================================================\n",
"Total params: 134,268,738\n",
"Trainable params: 119,554,050\n",
"Non-trainable params: 14,714,688\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"vgg.model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"vgg.model.optimizer.lr = 0.01"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/2\n",
"180/180 [==============================] - 109s 608ms/step - loss: 8.0680 - acc: 0.4994 - val_loss: 7.9704 - val_acc: 0.5055\n",
"Epoch 2/2\n",
"180/180 [==============================] - 111s 616ms/step - loss: 8.0655 - acc: 0.4996 - val_loss: 7.9704 - val_acc: 0.5055\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7f83903486d8>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vgg.model.fit_generator(batches, \n",
" epochs = 2, \n",
" validation_data = val_batches)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda root]",
"language": "python",
"name": "conda-root-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment