1
+ {
2
+ "cells" : [
3
+ {
4
+ "cell_type" : " markdown" ,
5
+ "metadata" : {
6
+ "id" : " view-in-github" ,
7
+ "colab_type" : " text"
8
+ },
9
+ "source" : [
10
+ " <a href=\" https://colab.research.google.com/github/andremicci/Generative_Deep_Learning_2nd_Edition/blob/main/cnn.ipynb\" target=\" _parent\" ><img src=\" https://colab.research.google.com/assets/colab-badge.svg\" alt=\" Open In Colab\" /></a>"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type" : " code" ,
15
+ "source" : [],
16
+ "metadata" : {
17
+ "id" : " Mhp4GfwTjOee"
18
+ },
19
+ "execution_count" : null ,
20
+ "outputs" : []
21
+ },
22
+ {
23
+ "cell_type" : " code" ,
24
+ "source" : [
25
+ " !git clone https://github.com/andremicci/Generative_Deep_Learning_2nd_Edition.git"
26
+ ],
27
+ "metadata" : {
28
+ "colab" : {
29
+ "base_uri" : " https://localhost:8080/"
30
+ },
31
+ "id" : " KOnmreJbjLIz" ,
32
+ "outputId" : " a3a49f71-3b29-41cb-fc11-a031442b32a9"
33
+ },
34
+ "execution_count" : null ,
35
+ "outputs" : [
36
+ {
37
+ "output_type" : " stream" ,
38
+ "name" : " stdout" ,
39
+ "text" : [
40
+ " Cloning into 'Generative_Deep_Learning_2nd_Edition'...\n " ,
41
+ " remote: Enumerating objects: 653, done.\u001b [K\n " ,
42
+ " remote: Counting objects: 100% (195/195), done.\u001b [K\n " ,
43
+ " remote: Compressing objects: 100% (70/70), done.\u001b [K\n " ,
44
+ " remote: Total 653 (delta 142), reused 125 (delta 125), pack-reused 458 (from 1)\u001b [K\n " ,
45
+ " Receiving objects: 100% (653/653), 37.09 MiB | 8.67 MiB/s, done.\n " ,
46
+ " Resolving deltas: 100% (377/377), done.\n "
47
+ ]
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "cell_type" : " markdown" ,
53
+ "metadata" : {
54
+ "id" : " TFy-fuvQjJJp"
55
+ },
56
+ "source" : [
57
+ " # 🏞 Convolutional Neural Network"
58
+ ]
59
+ },
60
+ {
61
+ "cell_type" : " markdown" ,
62
+ "metadata" : {
63
+ "id" : " wEIaaUnijJJr"
64
+ },
65
+ "source" : [
66
+ " In this notebook, we'll walk through the steps required to train your own convolutional neural network (CNN) on the CIFAR dataset"
67
+ ]
68
+ },
69
+ {
70
+ "cell_type" : " code" ,
71
+ "execution_count" : null ,
72
+ "metadata" : {
73
+ "colab" : {
74
+ "base_uri" : " https://localhost:8080/" ,
75
+ "height" : 350
76
+ },
77
+ "id" : " Ewl7DskxjJJs" ,
78
+ "outputId" : " 72f7b930-03ff-4bab-97c7-8f337c0da519"
79
+ },
80
+ "outputs" : [
81
+ {
82
+ "output_type" : " error" ,
83
+ "ename" : " ModuleNotFoundError" ,
84
+ "evalue" : " No module named 'notebooks'" ,
85
+ "traceback" : [
86
+ " \u001b [0;31m---------------------------------------------------------------------------\u001b [0m" ,
87
+ " \u001b [0;31mModuleNotFoundError\u001b [0m Traceback (most recent call last)" ,
88
+ " \u001b [0;32m<ipython-input-2-a230bc8cc151>\u001b [0m in \u001b [0;36m<cell line: 0>\u001b [0;34m()\u001b [0m\n \u001b [1;32m 2\u001b [0m \u001b [0;34m\u001b [0m\u001b [0m\n \u001b [1;32m 3\u001b [0m \u001b [0;32mfrom\u001b [0m \u001b [0mtensorflow\u001b [0m\u001b [0;34m.\u001b [0m\u001b [0mkeras\u001b [0m \u001b [0;32mimport\u001b [0m \u001b [0mlayers\u001b [0m\u001b [0;34m,\u001b [0m \u001b [0mmodels\u001b [0m\u001b [0;34m,\u001b [0m \u001b [0moptimizers\u001b [0m\u001b [0;34m,\u001b [0m \u001b [0mutils\u001b [0m\u001b [0;34m,\u001b [0m \u001b [0mdatasets\u001b [0m\u001b [0;34m\u001b [0m\u001b [0;34m\u001b [0m\u001b [0m\n \u001b [0;32m----> 4\u001b [0;31m \u001b [0;32mfrom\u001b [0m \u001b [0mnotebooks\u001b [0m\u001b [0;34m.\u001b [0m\u001b [0mutils\u001b [0m \u001b [0;32mimport\u001b [0m \u001b [0mdisplay\u001b [0m\u001b [0;34m\u001b [0m\u001b [0;34m\u001b [0m\u001b [0m\n \u001b [0m" ,
89
+ " \u001b [0;31mModuleNotFoundError\u001b [0m: No module named 'notebooks'" ,
90
+ " " ,
91
+ " \u001b [0;31m---------------------------------------------------------------------------\u001b [0;32m\n NOTE: If your import is failing due to a missing package, you can\n manually install dependencies using either !pip or !apt.\n\n To view examples of installing some common dependencies, click the\n\" Open Examples\" button below.\n \u001b [0;31m---------------------------------------------------------------------------\u001b [0m\n "
92
+ ],
93
+ "errorDetails" : {
94
+ "actions" : [
95
+ {
96
+ "action" : " open_url" ,
97
+ "actionText" : " Open Examples" ,
98
+ "url" : " /notebooks/snippets/importing_libraries.ipynb"
99
+ }
100
+ ]
101
+ }
102
+ }
103
+ ],
104
+ "source" : [
105
+ " import numpy as np\n " ,
106
+ " \n " ,
107
+ " from tensorflow.keras import layers, models, optimizers, utils, datasets\n " ,
108
+ " from notebooks.utils import display"
109
+ ]
110
+ },
111
+ {
112
+ "cell_type" : " markdown" ,
113
+ "metadata" : {
114
+ "tags" : [],
115
+ "id" : " 5xHzrj8jjJJu"
116
+ },
117
+ "source" : [
118
+ " ## 0. Parameters <a name=\" parameters\" ></a>"
119
+ ]
120
+ },
121
+ {
122
+ "cell_type" : " code" ,
123
+ "execution_count" : null ,
124
+ "metadata" : {
125
+ "id" : " 4dTmq7jjjJJv"
126
+ },
127
+ "outputs" : [],
128
+ "source" : [
129
+ " NUM_CLASSES = 10"
130
+ ]
131
+ },
132
+ {
133
+ "cell_type" : " markdown" ,
134
+ "metadata" : {
135
+ "id" : " MTLZ1IG6jJJw"
136
+ },
137
+ "source" : [
138
+ " ## 1. Prepare the Data <a name=\" prepare\" ></a>"
139
+ ]
140
+ },
141
+ {
142
+ "cell_type" : " code" ,
143
+ "execution_count" : null ,
144
+ "metadata" : {
145
+ "id" : " DR22w6jsjJJx"
146
+ },
147
+ "outputs" : [],
148
+ "source" : [
149
+ " (x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data()"
150
+ ]
151
+ },
152
+ {
153
+ "cell_type" : " code" ,
154
+ "execution_count" : null ,
155
+ "metadata" : {
156
+ "id" : " gkQBN7pojJJx"
157
+ },
158
+ "outputs" : [],
159
+ "source" : [
160
+ " x_train = x_train.astype(\" float32\" ) / 255.0\n " ,
161
+ " x_test = x_test.astype(\" float32\" ) / 255.0\n " ,
162
+ " \n " ,
163
+ " y_train = utils.to_categorical(y_train, NUM_CLASSES)\n " ,
164
+ " y_test = utils.to_categorical(y_test, NUM_CLASSES)"
165
+ ]
166
+ },
167
+ {
168
+ "cell_type" : " code" ,
169
+ "execution_count" : null ,
170
+ "metadata" : {
171
+ "id" : " p6D1z7qPjJJz"
172
+ },
173
+ "outputs" : [],
174
+ "source" : [
175
+ " display(x_train[:10])\n " ,
176
+ " print(y_train[:10])"
177
+ ]
178
+ },
179
+ {
180
+ "cell_type" : " markdown" ,
181
+ "metadata" : {
182
+ "id" : " uqly1nGYjJJ0"
183
+ },
184
+ "source" : [
185
+ " ## 2. Build the model <a name=\" build\" ></a>"
186
+ ]
187
+ },
188
+ {
189
+ "cell_type" : " code" ,
190
+ "execution_count" : null ,
191
+ "metadata" : {
192
+ "id" : " rvLwhVf7jJJ1"
193
+ },
194
+ "outputs" : [],
195
+ "source" : [
196
+ " input_layer = layers.Input((32, 32, 3))\n " ,
197
+ " \n " ,
198
+ " x = layers.Conv2D(filters=32, kernel_size=3, strides=1, padding=\" same\" )(\n " ,
199
+ " input_layer\n " ,
200
+ " )\n " ,
201
+ " x = layers.BatchNormalization()(x)\n " ,
202
+ " x = layers.LeakyReLU()(x)\n " ,
203
+ " \n " ,
204
+ " x = layers.Conv2D(filters=32, kernel_size=3, strides=2, padding=\" same\" )(x)\n " ,
205
+ " x = layers.BatchNormalization()(x)\n " ,
206
+ " x = layers.LeakyReLU()(x)\n " ,
207
+ " \n " ,
208
+ " x = layers.Conv2D(filters=64, kernel_size=3, strides=1, padding=\" same\" )(x)\n " ,
209
+ " x = layers.BatchNormalization()(x)\n " ,
210
+ " x = layers.LeakyReLU()(x)\n " ,
211
+ " \n " ,
212
+ " x = layers.Conv2D(filters=64, kernel_size=3, strides=2, padding=\" same\" )(x)\n " ,
213
+ " x = layers.BatchNormalization()(x)\n " ,
214
+ " x = layers.LeakyReLU()(x)\n " ,
215
+ " \n " ,
216
+ " x = layers.Flatten()(x)\n " ,
217
+ " \n " ,
218
+ " x = layers.Dense(128)(x)\n " ,
219
+ " x = layers.BatchNormalization()(x)\n " ,
220
+ " x = layers.LeakyReLU()(x)\n " ,
221
+ " x = layers.Dropout(rate=0.5)(x)\n " ,
222
+ " \n " ,
223
+ " x = layers.Dense(NUM_CLASSES)(x)\n " ,
224
+ " output_layer = layers.Activation(\" softmax\" )(x)\n " ,
225
+ " \n " ,
226
+ " model = models.Model(input_layer, output_layer)\n " ,
227
+ " \n " ,
228
+ " model.summary()"
229
+ ]
230
+ },
231
+ {
232
+ "cell_type" : " markdown" ,
233
+ "metadata" : {
234
+ "tags" : [],
235
+ "id" : " _0JEpfyWjJJ3"
236
+ },
237
+ "source" : [
238
+ " ## 3. Train the model <a name=\" train\" ></a>"
239
+ ]
240
+ },
241
+ {
242
+ "cell_type" : " code" ,
243
+ "execution_count" : null ,
244
+ "metadata" : {
245
+ "id" : " RQWD-6i6jJJ4"
246
+ },
247
+ "outputs" : [],
248
+ "source" : [
249
+ " opt = optimizers.Adam(learning_rate=0.0005)\n " ,
250
+ " model.compile(\n " ,
251
+ " loss=\" categorical_crossentropy\" , optimizer=opt, metrics=[\" accuracy\" ]\n " ,
252
+ " )"
253
+ ]
254
+ },
255
+ {
256
+ "cell_type" : " code" ,
257
+ "execution_count" : null ,
258
+ "metadata" : {
259
+ "tags" : [],
260
+ "id" : " pajMd0T0jJJ5"
261
+ },
262
+ "outputs" : [],
263
+ "source" : [
264
+ " model.fit(\n " ,
265
+ " x_train,\n " ,
266
+ " y_train,\n " ,
267
+ " batch_size=32,\n " ,
268
+ " epochs=10,\n " ,
269
+ " shuffle=True,\n " ,
270
+ " validation_data=(x_test, y_test),\n " ,
271
+ " )"
272
+ ]
273
+ },
274
+ {
275
+ "cell_type" : " markdown" ,
276
+ "metadata" : {
277
+ "tags" : [],
278
+ "id" : " M2Jl9j7ljJJ5"
279
+ },
280
+ "source" : [
281
+ " ## 4. Evaluation <a name=\" evaluate\" ></a>"
282
+ ]
283
+ },
284
+ {
285
+ "cell_type" : " code" ,
286
+ "execution_count" : null ,
287
+ "metadata" : {
288
+ "id" : " t7GXyVvYjJJ6"
289
+ },
290
+ "outputs" : [],
291
+ "source" : [
292
+ " model.evaluate(x_test, y_test, batch_size=1000)"
293
+ ]
294
+ },
295
+ {
296
+ "cell_type" : " code" ,
297
+ "execution_count" : null ,
298
+ "metadata" : {
299
+ "id" : " Ttvkm2g_jJJ6"
300
+ },
301
+ "outputs" : [],
302
+ "source" : [
303
+ " CLASSES = np.array(\n " ,
304
+ " [\n " ,
305
+ " \" airplane\" ,\n " ,
306
+ " \" automobile\" ,\n " ,
307
+ " \" bird\" ,\n " ,
308
+ " \" cat\" ,\n " ,
309
+ " \" deer\" ,\n " ,
310
+ " \" dog\" ,\n " ,
311
+ " \" frog\" ,\n " ,
312
+ " \" horse\" ,\n " ,
313
+ " \" ship\" ,\n " ,
314
+ " \" truck\" ,\n " ,
315
+ " ]\n " ,
316
+ " )\n " ,
317
+ " \n " ,
318
+ " preds = model.predict(x_test)\n " ,
319
+ " preds_single = CLASSES[np.argmax(preds, axis=-1)]\n " ,
320
+ " actual_single = CLASSES[np.argmax(y_test, axis=-1)]"
321
+ ]
322
+ },
323
+ {
324
+ "cell_type" : " code" ,
325
+ "execution_count" : null ,
326
+ "metadata" : {
327
+ "id" : " 5SkFQ0pHjJJ7"
328
+ },
329
+ "outputs" : [],
330
+ "source" : [
331
+ " import matplotlib.pyplot as plt\n " ,
332
+ " \n " ,
333
+ " n_to_show = 10\n " ,
334
+ " indices = np.random.choice(range(len(x_test)), n_to_show)\n " ,
335
+ " \n " ,
336
+ " fig = plt.figure(figsize=(15, 3))\n " ,
337
+ " fig.subplots_adjust(hspace=0.4, wspace=0.4)\n " ,
338
+ " \n " ,
339
+ " for i, idx in enumerate(indices):\n " ,
340
+ " img = x_test[idx]\n " ,
341
+ " ax = fig.add_subplot(1, n_to_show, i + 1)\n " ,
342
+ " ax.axis(\" off\" )\n " ,
343
+ " ax.text(\n " ,
344
+ " 0.5,\n " ,
345
+ " -0.35,\n " ,
346
+ " \" pred = \" + str(preds_single[idx]),\n " ,
347
+ " fontsize=10,\n " ,
348
+ " ha=\" center\" ,\n " ,
349
+ " transform=ax.transAxes,\n " ,
350
+ " )\n " ,
351
+ " ax.text(\n " ,
352
+ " 0.5,\n " ,
353
+ " -0.7,\n " ,
354
+ " \" act = \" + str(actual_single[idx]),\n " ,
355
+ " fontsize=10,\n " ,
356
+ " ha=\" center\" ,\n " ,
357
+ " transform=ax.transAxes,\n " ,
358
+ " )\n " ,
359
+ " ax.imshow(img)"
360
+ ]
361
+ }
362
+ ],
363
+ "metadata" : {
364
+ "kernelspec" : {
365
+ "display_name" : " Python 3 (ipykernel)" ,
366
+ "language" : " python" ,
367
+ "name" : " python3"
368
+ },
369
+ "language_info" : {
370
+ "codemirror_mode" : {
371
+ "name" : " ipython" ,
372
+ "version" : 3
373
+ },
374
+ "file_extension" : " .py" ,
375
+ "mimetype" : " text/x-python" ,
376
+ "name" : " python" ,
377
+ "nbconvert_exporter" : " python" ,
378
+ "pygments_lexer" : " ipython3" ,
379
+ "version" : " 3.8.10"
380
+ },
381
+ "vscode" : {
382
+ "interpreter" : {
383
+ "hash" : " 31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
384
+ }
385
+ },
386
+ "colab" : {
387
+ "provenance" : [],
388
+ "include_colab_link" : true
389
+ }
390
+ },
391
+ "nbformat" : 4 ,
392
+ "nbformat_minor" : 0
393
+ }
0 commit comments