-
-
Save srsani/85376349b2dfdede966c2f5ba23f143d to your computer and use it in GitHub Desktop.
This file contains 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": [ | |
{ | |
"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