Skip to content

Commit

Permalink
getting 100% accuracy on deep consensus architecture. was a bug in th…
Browse files Browse the repository at this point in the history
…e previous version with the last part of the layer. it shoudl be dense, dropout, then dense(softmax)
  • Loading branch information
geoffwoollard committed Feb 26, 2019
1 parent 3377459 commit 33a71be
Show file tree
Hide file tree
Showing 2 changed files with 556 additions and 130 deletions.
167 changes: 94 additions & 73 deletions nb/cnn-deep-consensus-architecture.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": 4,
"metadata": {
"scrolled": true
},
Expand All @@ -27,22 +27,22 @@
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from keras.layers import Dense, Activation, AveragePooling2D, Dropout\n",
"from keras.layers import Dense, Activation, AveragePooling2D, Dropout, Conv2D, MaxPooling2D, Flatten\n",
"from keras.models import Sequential\n",
"from keras.layers.normalization import BatchNormalization\n",
"from keras.optimizers import RMSprop, Adadelta, Adam, SGD"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/Users/gw/repos/ece1512_project\n"
"/Users/gw/repos\n"
]
}
],
Expand All @@ -61,7 +61,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -85,7 +85,7 @@
},
{
"cell_type": "code",
"execution_count": 23,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -94,7 +94,7 @@
},
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -112,16 +112,16 @@
},
{
"cell_type": "code",
"execution_count": 34,
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x1a7137a9e8>"
"<matplotlib.image.AxesImage at 0x1a628f0048>"
]
},
"execution_count": 34,
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
Expand All @@ -139,7 +139,6 @@
}
],
"source": [
"n_crop=128\n",
"fig = plt.figure()\n",
"a = fig.add_subplot(121)\n",
"a.set_title('hires')\n",
Expand All @@ -152,7 +151,7 @@
},
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -163,7 +162,7 @@
},
{
"cell_type": "code",
"execution_count": 36,
"execution_count": 12,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -207,27 +206,7 @@
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(128, 128, 1)"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train.shape[1::]"
]
},
{
"cell_type": "code",
"execution_count": 49,
"execution_count": 14,
"metadata": {},
"outputs": [
{
Expand All @@ -237,55 +216,53 @@
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"conv2d_108 (Conv2D) (None, 128, 128, 8) 1808 \n",
"conv2d_9 (Conv2D) (None, 128, 128, 8) 1808 \n",
"_________________________________________________________________\n",
"conv2d_109 (Conv2D) (None, 128, 128, 8) 14408 \n",
"conv2d_10 (Conv2D) (None, 128, 128, 8) 14408 \n",
"_________________________________________________________________\n",
"batch_normalization_53 (Batc (None, 128, 128, 8) 32 \n",
"activation_5 (Activation) (None, 128, 128, 8) 0 \n",
"_________________________________________________________________\n",
"activation_64 (Activation) (None, 128, 128, 8) 0 \n",
"batch_normalization_5 (Batch (None, 128, 128, 8) 32 \n",
"_________________________________________________________________\n",
"max_pooling2d_44 (MaxPooling (None, 64, 64, 8) 0 \n",
"max_pooling2d_4 (MaxPooling2 (None, 64, 64, 8) 0 \n",
"_________________________________________________________________\n",
"conv2d_110 (Conv2D) (None, 64, 64, 8) 3144 \n",
"conv2d_11 (Conv2D) (None, 64, 64, 8) 3144 \n",
"_________________________________________________________________\n",
"conv2d_111 (Conv2D) (None, 64, 64, 16) 6288 \n",
"conv2d_12 (Conv2D) (None, 64, 64, 16) 6288 \n",
"_________________________________________________________________\n",
"batch_normalization_54 (Batc (None, 64, 64, 16) 64 \n",
"activation_6 (Activation) (None, 64, 64, 16) 0 \n",
"_________________________________________________________________\n",
"activation_65 (Activation) (None, 64, 64, 16) 0 \n",
"batch_normalization_6 (Batch (None, 64, 64, 16) 64 \n",
"_________________________________________________________________\n",
"max_pooling2d_45 (MaxPooling (None, 32, 32, 16) 0 \n",
"max_pooling2d_5 (MaxPooling2 (None, 32, 32, 16) 0 \n",
"_________________________________________________________________\n",
"conv2d_112 (Conv2D) (None, 32, 32, 32) 4640 \n",
"conv2d_13 (Conv2D) (None, 32, 32, 32) 4640 \n",
"_________________________________________________________________\n",
"conv2d_113 (Conv2D) (None, 32, 32, 32) 9248 \n",
"conv2d_14 (Conv2D) (None, 32, 32, 32) 9248 \n",
"_________________________________________________________________\n",
"batch_normalization_55 (Batc (None, 32, 32, 32) 128 \n",
"activation_7 (Activation) (None, 32, 32, 32) 0 \n",
"_________________________________________________________________\n",
"activation_66 (Activation) (None, 32, 32, 32) 0 \n",
"batch_normalization_7 (Batch (None, 32, 32, 32) 128 \n",
"_________________________________________________________________\n",
"max_pooling2d_46 (MaxPooling (None, 16, 16, 32) 0 \n",
"max_pooling2d_6 (MaxPooling2 (None, 16, 16, 32) 0 \n",
"_________________________________________________________________\n",
"conv2d_114 (Conv2D) (None, 16, 16, 64) 18496 \n",
"conv2d_15 (Conv2D) (None, 16, 16, 64) 18496 \n",
"_________________________________________________________________\n",
"conv2d_115 (Conv2D) (None, 16, 16, 64) 36928 \n",
"conv2d_16 (Conv2D) (None, 16, 16, 64) 36928 \n",
"_________________________________________________________________\n",
"batch_normalization_56 (Batc (None, 16, 16, 64) 256 \n",
"activation_8 (Activation) (None, 16, 16, 64) 0 \n",
"_________________________________________________________________\n",
"activation_67 (Activation) (None, 16, 16, 64) 0 \n",
"batch_normalization_8 (Batch (None, 16, 16, 64) 256 \n",
"_________________________________________________________________\n",
"average_pooling2d_13 (Averag (None, 8, 8, 64) 0 \n",
"average_pooling2d_2 (Average (None, 8, 8, 64) 0 \n",
"_________________________________________________________________\n",
"flatten_16 (Flatten) (None, 4096) 0 \n",
"flatten_2 (Flatten) (None, 4096) 0 \n",
"_________________________________________________________________\n",
"dense_31 (Dense) (None, 512) 2097664 \n",
"dense_3 (Dense) (None, 512) 2097664 \n",
"_________________________________________________________________\n",
"dense_32 (Dense) (None, 2) 1026 \n",
"dropout_2 (Dropout) (None, 512) 0 \n",
"_________________________________________________________________\n",
"activation_68 (Activation) (None, 2) 0 \n",
"_________________________________________________________________\n",
"dropout_10 (Dropout) (None, 2) 0 \n",
"dense_4 (Dense) (None, 2) 1026 \n",
"=================================================================\n",
"Total params: 2,194,130\n",
"Trainable params: 2,193,890\n",
Expand All @@ -295,8 +272,6 @@
}
],
"source": [
"from keras.layers import Conv2D, MaxPooling2D, Flatten\n",
"\n",
"model = Sequential()\n",
"#2\n",
"# 1808 = (15*15+1)*8\n",
Expand All @@ -306,42 +281,46 @@
"model.add(Conv2D(8, kernel_size=(15,15),padding='same'))\n",
"# see https://stackoverflow.com/questions/34716454/where-do-i-call-the-batchnormalization-function-in-keras\n",
"# not sure if batch normaliztion + relu or relu + batch normaliztion\n",
"model.add(BatchNormalization())\n",
"model.add(Activation('relu'))\n",
"model.add(BatchNormalization())\n",
"\n",
"#4\n",
"model.add(MaxPooling2D((7,7), strides=2,padding='same'))\n",
"#5 \n",
"model.add(Conv2D(8, kernel_size=(7,7), activation='relu',padding='same'))\n",
"#6\n",
"model.add(Conv2D(16, kernel_size=(7,7),padding='same'))\n",
"model.add(BatchNormalization())\n",
"model.add(Activation('relu'))\n",
"model.add(BatchNormalization())\n",
"\n",
"#7\n",
"model.add(MaxPooling2D((5,5), strides=2,padding='same'))\n",
"#8 \n",
"model.add(Conv2D(32, kernel_size=(3,3), activation='relu',padding='same'))\n",
"#9\n",
"model.add(Conv2D(32, kernel_size=(3,3),padding='same'))\n",
"model.add(BatchNormalization())\n",
"model.add(Activation('relu'))\n",
"model.add(BatchNormalization())\n",
"\n",
"#10\n",
"model.add(MaxPooling2D((3,3), strides=2,padding='same'))\n",
"#11\n",
"model.add(Conv2D(64, kernel_size=(3,3), activation='relu',padding='same'))\n",
"#12\n",
"model.add(Conv2D(64, kernel_size=(3,3),padding='same'))\n",
"model.add(BatchNormalization())\n",
"model.add(Activation('relu'))\n",
"model.add(BatchNormalization())\n",
"\n",
"#13\n",
"model.add(AveragePooling2D(pool_size=(4, 4), strides=2,padding='same'))\n",
"###\n",
"model.add(Flatten())\n",
"model.add(Dense(512, activation='relu')) # 2097664 = 512*(8*8*64) ; AveragePooling2D size is 8*8*64=4096\n",
"n_classes = np.unique(o_y_train.tolist()).size\n",
"model.add(Dense(n_classes))\n",
"model.add(Activation('relu'))\n",
"model.add(Dropout(rate=0.5)) # note large dropout rate\n",
"\n",
"n_classes = np.unique(o_y_train.tolist()).size\n",
"model.add(Dense(n_classes, activation='softmax'))\n",
"\n",
"model.summary()\n",
"\n",
"model.compile(optimizer=SGD(), loss='categorical_crossentropy', metrics=['categorical_accuracy'])\n",
Expand All @@ -357,16 +336,46 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"108/900 [==>...........................] - ETA: 2:02 - loss: nan - categorical_accuracy: 0.4537"
"900/900 [==============================] - 113s 126ms/step - loss: 0.0179 - categorical_accuracy: 0.9933\n",
"Epoch 2/10\n",
"900/900 [==============================] - 112s 124ms/step - loss: 8.1885e-04 - categorical_accuracy: 1.0000\n",
"Epoch 3/10\n",
"900/900 [==============================] - 113s 125ms/step - loss: 1.7819e-04 - categorical_accuracy: 1.0000\n",
"Epoch 4/10\n",
"900/900 [==============================] - 113s 126ms/step - loss: 1.3136e-04 - categorical_accuracy: 1.0000\n",
"Epoch 5/10\n",
"900/900 [==============================] - 114s 126ms/step - loss: 1.2582e-04 - categorical_accuracy: 1.0000\n",
"Epoch 6/10\n",
"900/900 [==============================] - 114s 127ms/step - loss: 1.1620e-04 - categorical_accuracy: 1.0000\n",
"Epoch 7/10\n",
"900/900 [==============================] - 114s 126ms/step - loss: 1.1021e-04 - categorical_accuracy: 1.0000\n",
"Epoch 8/10\n",
"900/900 [==============================] - 115s 128ms/step - loss: 9.1957e-05 - categorical_accuracy: 1.0000\n",
"Epoch 9/10\n",
"900/900 [==============================] - 113s 126ms/step - loss: 6.3013e-04 - categorical_accuracy: 1.0000\n",
"Epoch 10/10\n",
"900/900 [==============================] - 120s 134ms/step - loss: 1.9110e-04 - categorical_accuracy: 1.0000\n",
"CPU times: user 1h 11min 35s, sys: 21min 52s, total: 1h 33min 27s\n",
"Wall time: 19min 1s\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x1a6296abe0>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
Expand All @@ -378,9 +387,21 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 16,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100/100 [==============================] - 4s 43ms/step\n",
"\n",
"categorical_accuracy: 100.00%\n",
"CPU times: user 19 s, sys: 6.9 s, total: 25.9 s\n",
"Wall time: 4.27 s\n"
]
}
],
"source": [
"%%time\n",
"scores = model.evaluate(x_val, y_val_targ.values)\n",
Expand Down
Loading

0 comments on commit 33a71be

Please sign in to comment.