-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsimple-image-recognition-using-notmnist-dataset.html
7455 lines (7219 loc) · 561 KB
/
simple-image-recognition-using-notmnist-dataset.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--[if lt IE 9 ]><html class="no-js oldie" lang="zh-hant-tw"> <![endif]-->
<!--[if IE 9 ]><html class="no-js oldie ie9" lang="zh-hant-tw"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html class="no-js" lang="zh-hant-tw">
<!--<![endif]-->
<head>
<!--- basic page needs
================================================== -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="author" content="Lee Meng" />
<title>LeeMeng - Simple Image Recognition using NotMNIST dataset</title>
<!--- article-specific meta data
================================================== -->
<meta name="description" content="Today we're going to do some simple image recogintion using NotMNIST dataset. But before creating model for prediction, it's more important to explore, clean and normalize our dataset in order to make the learning go smoother when we actually build predictive models." />
<meta name="keywords" content="Python, Matplotlib, Data Preprocessing, Data Cleaning, NotMNIST, Sklearn, Machine Learning, Image Recognition, Udacity" />
<meta name="tags" content="Python" />
<meta name="tags" content="Matplotlib" />
<meta name="tags" content="Data Preprocessing" />
<meta name="tags" content="Data Cleaning" />
<meta name="tags" content="NotMNIST" />
<meta name="tags" content="Sklearn" />
<meta name="tags" content="Machine Learning" />
<meta name="tags" content="Image Recognition" />
<meta name="tags" content="Udacity" />
<!--- Open Graph Object metas
================================================== -->
<meta property="og:image" content="https://leemeng.tw/theme/images/background/default.jpg" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://leemeng.tw/simple-image-recognition-using-notmnist-dataset.html" />
<meta property="og:title" content="Simple Image Recognition using NotMNIST dataset" />
<meta property="og:description" content="Today we're going to do some simple image recogintion using NotMNIST dataset. But before creating model for prediction, it's more important to explore, clean and normalize our dataset in order to make the learning go smoother when we actually build predictive models." />
<!-- mobile specific metas
================================================== -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS
================================================== -->
<!--for customized css in individual page-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/bootstrap.min.css">
<!--for showing toc navigation which slide in from left-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/toc-nav.css">
<!--for responsive embed youtube video-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/embed_youtube.css">
<!--for prettify dark-mode result-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/darkmode.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/base.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/vendor.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/main.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/ipython.css">
<link rel="stylesheet" type="text/css" href='https://leemeng.tw/theme/css/progress-bar.css' />
<!--TiqueSearch-->
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400">
<link rel="stylesheet" href="https://leemeng.tw/theme/tipuesearch/css/normalize.css">
<link rel="stylesheet" href="https://leemeng.tw/theme/tipuesearch/css/tipuesearch.css">
<!-- script
================================================== -->
<script src="https://leemeng.tw/theme/js/modernizr.js"></script>
<script src="https://leemeng.tw/theme/js/pace.min.js"></script>
<!-- favicons
================================================== -->
<link rel="shortcut icon" href="../theme/images/favicon.ico" type="image/x-icon"/>
<link rel="icon" href="../theme/images/favicon.ico" type="image/x-icon"/>
<!-- Global Site Tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-106559980-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'UA-106559980-1');
</script>
</head>
<body id="top">
<!-- header
================================================== -->
<header class="s-header">
<div class="header-logo">
<a class="site-logo" href="../index.html"><img src="https://leemeng.tw/theme/images/logo.png" alt="Homepage"></a>
</div>
<!--navigation bar ref: http://jinja.pocoo.org/docs/2.10/tricks/-->
<nav class="header-nav-wrap">
<ul class="header-nav">
<li>
<a href="../index.html#home">Home</a>
</li>
<li>
<a href="../index.html#about">About</a>
</li>
<li>
<a href="../index.html#projects">Projects</a>
</li>
<li class="current">
<a href="../blog.html">Blog</a>
</li>
<li>
<a href="https://demo.leemeng.tw">Demo</a>
</li>
<li>
<a href="../books.html">Books</a>
</li>
<li>
<a href="../index.html#contact">Contact</a>
</li>
</ul>
<!--<div class="search-container">-->
<!--<form action="../search.html">-->
<!--<input type="text" placeholder="Search.." name="search">-->
<!--<button type="submit"><i class="im im-magnifier" aria-hidden="true"></i></button>-->
<!--</form>-->
<!--</div>-->
</nav>
<a class="header-menu-toggle" href="#0"><span>Menu</span></a>
</header> <!-- end s-header -->
<!--TOC navigation displayed when clicked from left-navigation button-->
<div id="tocNav" class="overlay" onclick="closeTocNav()">
<div class="overlay-content">
<div id="toc"><ul><li><a class="toc-href" href="#" title="Simple Image Recognition using NotMNIST dataset">Simple Image Recognition using NotMNIST dataset</a><ul><li><a class="toc-href" href="#Workflow" title="Workflow">Workflow</a></li><li><a class="toc-href" href="#After-finishing-this-notebook,-we-learn" title="After finishing this notebook, we learn">After finishing this notebook, we learn</a></li><li><a class="toc-href" href="#Import-libraries" title="Import libraries">Import libraries</a></li><li><a class="toc-href" href="#Dataset" title="Dataset">Dataset</a></li><li><a class="toc-href" href="#Extract-the-dataset-into-folders-by-characters" title="Extract the dataset into folders by characters">Extract the dataset into folders by characters</a></li><li><a class="toc-href" href="#Problem-1---Sample-some-images-in-dataset-and-render-them" title="Problem 1 - Sample some images in dataset and render them">Problem 1 - Sample some images in dataset and render them</a><ul><li><a class="toc-href" href="#For-each-character-folder-in-dataset,-randomly-choose-one-picture-in-it-and-render-them-horizontally" title="For each character folder in dataset, randomly choose one picture in it and render them horizontally">For each character folder in dataset, randomly choose one picture in it and render them horizontally</a></li></ul></li><li><a class="toc-href" href="#Data-curation_1" title="Data curation">Data curation</a><ul><li><a class="toc-href" href="#Debugging" title="Debugging">Debugging</a></li></ul></li><li><a class="toc-href" href="#Problem-2_1" title="Problem 2">Problem 2</a><ul><li><a class="toc-href" href="#Load--test-data-and--show-normalized-images-for-each-pickled-dataset" title="Load test data and show normalized images for each pickled dataset">Load test data and show normalized images for each pickled dataset</a></li></ul></li><li><a class="toc-href" href="#Problem-3_1" title="Problem 3">Problem 3</a></li><li><a class="toc-href" href="#Merge-seperate-character-dataset-together-(for-all-training/test/valid)" title="Merge seperate character dataset together (for all training/test/valid)">Merge seperate character dataset together (for all training/test/valid)</a></li><li><a class="toc-href" href="#Randomize-data" title="Randomize data">Randomize data</a></li><li><a class="toc-href" href="#Problem-4---Sanity-check-after-shuffling-dataset" title="Problem 4 - Sanity check after shuffling dataset">Problem 4 - Sanity check after shuffling dataset</a></li><li><a class="toc-href" href="#Serialize-dataset-for-later-usage" title="Serialize dataset for later usage">Serialize dataset for later usage</a></li><li><a class="toc-href" href="#Problem-5---Remove-overlapping-samples-in-test/valid-set" title="Problem 5 - Remove overlapping samples in test/valid set">Problem 5 - Remove overlapping samples in test/valid set</a><ul><li><a class="toc-href" href="#Find-duplicate-images-in-test-set" title="Find duplicate images in test set">Find duplicate images in test set</a></li><li><a class="toc-href" href="#Duplicate-images-in-validation-set" title="Duplicate images in validation set">Duplicate images in validation set</a></li><li><a class="toc-href" href="#Serialize-sanitized-dataset-for-later-model-performance-comparison" title="Serialize sanitized dataset for later model performance comparison">Serialize sanitized dataset for later model performance comparison</a></li></ul></li><li><a class="toc-href" href="#Problem-6---Build-naive-classifier-using-logistic-regression_1" title="Problem 6 - Build naive classifier using logistic regression">Problem 6 - Build naive classifier using logistic regression</a></li></ul></li></ul></div>
</div>
</div>
<!--custom images with icon shown on left nav-->
<!--the details are set in `pelicanconf.py` as `LEFT_NAV_IMAGES`-->
<article class="blog-single">
<!-- page header/blog hero, use custom cover image if available
================================================== -->
<div class="page-header page-header--single page-hero" style="background-image:url(https://leemeng.tw/theme/images/background/default.jpg)">
<div class="row page-header__content narrow">
<article class="col-full">
<div class="page-header__info">
<div class="page-header__cat">
<a href="https://leemeng.tw/tag/python.html" rel="tag">Python</a>
<a href="https://leemeng.tw/tag/matplotlib.html" rel="tag">Matplotlib</a>
<a href="https://leemeng.tw/tag/data-preprocessing.html" rel="tag">Data Preprocessing</a>
<a href="https://leemeng.tw/tag/data-cleaning.html" rel="tag">Data Cleaning</a>
<a href="https://leemeng.tw/tag/notmnist.html" rel="tag">NotMNIST</a>
</div>
</div>
<h1 class="page-header__title">
<a href="https://leemeng.tw/simple-image-recognition-using-notmnist-dataset.html" title="">
Simple Image Recognition using NotMNIST dataset
</a>
</h1>
<ul class="page-header__meta">
<li class="date">2017-09-19 (Tue)</li>
<li class="page-view">
2,843 views
</li>
</ul>
</article>
</div>
</div> <!-- end page-header -->
<div class="KW_progressContainer">
<div class="KW_progressBar"></div>
</div>
<div class="row blog-content" style="position: relative">
<div id="left-navigation">
<div id="search-wrap">
<i class="im im-magnifier" aria-hidden="true"></i>
<div id="search">
<form action="../search.html">
<div class="tipue_search_right"><input type="text" name="q" id="tipue_search_input" pattern=".{2,}" title="想搜尋什麼呢?(請至少輸入兩個字)" required></div>
</form>
</div>
</div>
<div id="toc-wrap">
<a title="顯示/隱藏 文章章節">
<i class="im im-menu" aria-hidden="true" onclick="toggleTocNav()"></i>
</a>
</div>
<div id="social-wrap" style="cursor: pointer">
<a class="open-popup" title="訂閱最新文章">
<i class="im im-newspaper-o" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://www.facebook.com/sharer/sharer.php?u=https%3A//leemeng.tw/simple-image-recognition-using-notmnist-dataset.html" target="_blank" title="分享到 Facebook">
<i class="im im-facebook" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A//leemeng.tw/simple-image-recognition-using-notmnist-dataset.html&title=Simple%20Image%20Recognition%20using%20NotMNIST%20dataset&summary=Today%20we%27re%20going%20to%20do%20some%20simple%20image%20recogintion%20using%20NotMNIST%20dataset.%20But%20before%20creating%20model%20for%20prediction%2C%20it%27s%20more%20important%20to%20explore%2C%20clean%20and%20normalize%20our%20dataset%20in%20order%20to%20make%20the%20learning%20go%20smoother%20when%20we%20actually%20build%20predictive%20models.&source=https%3A//leemeng.tw/simple-image-recognition-using-notmnist-dataset.html" target="_blank" title="分享到 LinkedIn">
<i class="im im-linkedin" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://twitter.com/intent/tweet?text=Simple%20Image%20Recognition%20using%20NotMNIST%20dataset&url=https%3A//leemeng.tw/simple-image-recognition-using-notmnist-dataset.html&hashtags=python,matplotlib,data-preprocessing,data-cleaning,notmnist,sklearn,machine-learning,image-recognition,udacity" target="_blank" title="分享到 Twitter">
<i class="im im-twitter" aria-hidden="true"></i>
</a>
</div>
<!--custom images with icon shown on left nav-->
</div>
<div class="col-full blog-content__main">
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Today we're going to do some simple image recogintion using NotMNIST dataset. But before creating model for prediction, it's more important to explore, clean and normalize our dataset in order to make the learning go smoother when we actually build predictive models.</p>
<p>I motified the <a href="https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/1_notmnist.ipynb">notebook</a> from Udacity's online Deep learning course and the objective of this assignment is to learn about <strong>simple data curation practices</strong>, and familiarize you with some of the data we'll be reusing later.</p>
<p>This notebook uses the <a href="http://yaroslavvb.blogspot.com/2011/09/notmnist-dataset.html">notMNIST</a> dataset to be used with python experiments. This dataset is designed to look like the classic <a href="http://yann.lecun.com/exdb/mnist/">MNIST</a> dataset, while looking a little more like real data: it's a harder task, and the data is a lot less 'clean' than MNIST.</p>
<p><img src="images/notmnist.png" width="70%"/></p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This notebook is mainly foucsing on data preprocessing rather than building models.</p>
<h2 id="Workflow">Workflow<a class="anchor-link" href="#Workflow">¶</a></h2><ul>
<li>Download / load raw notMNIST dataset</li>
<li>Drop unreadable images and save the remaining images</li>
<li>Combine all images and divide it into testing/validation/test set</li>
<li>Shuffle / Randomize the dataset</li>
<li>Remove duplicate images appear both in train/test or train/validation set</li>
<li>Build simple model for image recognition using different size of training data</li>
</ul>
<h2 id="After-finishing-this-notebook,-we-learn">After finishing this notebook, we learn<a class="anchor-link" href="#After-finishing-this-notebook,-we-learn">¶</a></h2><ul>
<li>Use matplotlib to read images, transform them to ndarray and render.</li>
<li>Identify whether there exist unbalanced problem for the labels of classification .</li>
<li>Understand why it's important to have both valid and test set.</li>
<li>Identify the importance of randomizing data for better efficieny when training sequentially.</li>
<li>Identify duplicate images between training/test set.</li>
</ul>
<hr/>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Import-libraries">Import libraries<a class="anchor-link" href="#Import-libraries">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="c1"># These are all the modules we'll be using later. Make sure you can import them</span>
<span class="c1"># before proceeding further.</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">tarfile</span>
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="kn">import</span> <span class="n">display</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">scipy</span> <span class="kn">import</span> <span class="n">ndimage</span>
<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
<span class="kn">from</span> <span class="nn">six.moves.urllib.request</span> <span class="kn">import</span> <span class="n">urlretrieve</span>
<span class="kn">from</span> <span class="nn">six.moves</span> <span class="kn">import</span> <span class="n">cPickle</span> <span class="k">as</span> <span class="n">pickle</span>
<span class="c1"># Config the matplotlib backend as plotting inline in IPython</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Dataset">Dataset<a class="anchor-link" href="#Dataset">¶</a></h2><ul>
<li>Download compressed dataset if the dataset is not available yet</li>
</ul>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>First, we'll download the dataset to our local machine. The data consists of characters rendered in a variety of fonts on a 28x28 image. <strong>The labels are limited to 'A' through 'J' (10 classes). The training set has about 500k and the testset 19000 labeled examples.</strong> Given these sizes, it should be possible to train models quickly on any machine.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">url</span> <span class="o">=</span> <span class="s1">'https://commondatastorage.googleapis.com/books1000/'</span>
<span class="n">last_percent_reported</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">data_root</span> <span class="o">=</span> <span class="s1">'./datasets'</span> <span class="c1"># Change me to store data elsewhere</span>
<span class="k">def</span> <span class="nf">download_progress_hook</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">blockSize</span><span class="p">,</span> <span class="n">totalSize</span><span class="p">):</span>
<span class="w"> </span><span class="sd">"""A hook to report the progress of a download. This is mostly intended for users with</span>
<span class="sd"> slow internet connections. Reports every 5% change in download progress.</span>
<span class="sd"> """</span>
<span class="k">global</span> <span class="n">last_percent_reported</span>
<span class="n">percent</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">count</span> <span class="o">*</span> <span class="n">blockSize</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">/</span> <span class="n">totalSize</span><span class="p">)</span>
<span class="k">if</span> <span class="n">last_percent_reported</span> <span class="o">!=</span> <span class="n">percent</span><span class="p">:</span>
<span class="k">if</span> <span class="n">percent</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s%%</span><span class="s2">"</span> <span class="o">%</span> <span class="n">percent</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"."</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="n">last_percent_reported</span> <span class="o">=</span> <span class="n">percent</span>
<span class="k">def</span> <span class="nf">maybe_download</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">expected_bytes</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="w"> </span><span class="sd">"""Download a file if not present, and make sure it's the right size."""</span>
<span class="n">dest_filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">data_root</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">dest_filename</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Attempting to download:'</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
<span class="n">filename</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">urlretrieve</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span> <span class="n">dest_filename</span><span class="p">,</span> <span class="n">reporthook</span><span class="o">=</span><span class="n">download_progress_hook</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Download Complete!'</span><span class="p">)</span>
<span class="n">statinfo</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">dest_filename</span><span class="p">)</span>
<span class="k">if</span> <span class="n">statinfo</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="n">expected_bytes</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Found and verified'</span><span class="p">,</span> <span class="n">dest_filename</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">'Failed to verify '</span> <span class="o">+</span> <span class="n">dest_filename</span> <span class="o">+</span> <span class="s1">'. Can you get to it with a browser?'</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dest_filename</span>
<span class="n">train_filename</span> <span class="o">=</span> <span class="n">maybe_download</span><span class="p">(</span><span class="s1">'notMNIST_large.tar.gz'</span><span class="p">,</span> <span class="mi">247336696</span><span class="p">)</span>
<span class="n">test_filename</span> <span class="o">=</span> <span class="n">maybe_download</span><span class="p">(</span><span class="s1">'notMNIST_small.tar.gz'</span><span class="p">,</span> <span class="mi">8458043</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_subarea output_stream output_stdout output_text">
<pre>Found and verified ./datasets/notMNIST_large.tar.gz
Found and verified ./datasets/notMNIST_small.tar.gz
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Extract-the-dataset-into-folders-by-characters">Extract the dataset into folders by characters<a class="anchor-link" href="#Extract-the-dataset-into-folders-by-characters">¶</a></h2><p>Extract the dataset from the compressed .tar.gz file.
This should give you a set of directories, labeled A through J.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">num_classes</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">133</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">maybe_extract</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filename</span><span class="p">)[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># remove .tar.gz</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">force</span><span class="p">:</span>
<span class="c1"># You may override by setting force=True.</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1"> already present - Skipping extraction of </span><span class="si">%s</span><span class="s1">.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Extracting data for </span><span class="si">%s</span><span class="s1">. This may take a while. Please wait.'</span> <span class="o">%</span> <span class="n">root</span><span class="p">)</span>
<span class="n">tar</span> <span class="o">=</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="n">tar</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">data_root</span><span class="p">)</span>
<span class="n">tar</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">data_folders</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">d</span><span class="p">))]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_folders</span><span class="p">)</span> <span class="o">!=</span> <span class="n">num_classes</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">'Expected </span><span class="si">%d</span><span class="s1"> folders, one per class. Found </span><span class="si">%d</span><span class="s1"> instead.'</span> <span class="o">%</span> <span class="p">(</span>
<span class="n">num_classes</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_folders</span><span class="p">)))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">data_folders</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data_folders</span>
<span class="n">train_folders</span> <span class="o">=</span> <span class="n">maybe_extract</span><span class="p">(</span><span class="n">train_filename</span><span class="p">)</span>
<span class="n">test_folders</span> <span class="o">=</span> <span class="n">maybe_extract</span><span class="p">(</span><span class="n">test_filename</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_subarea output_stream output_stdout output_text">
<pre>./datasets/notMNIST_large already present - Skipping extraction of ./datasets/notMNIST_large.tar.gz.
['./datasets/notMNIST_large/A', './datasets/notMNIST_large/B', './datasets/notMNIST_large/C', './datasets/notMNIST_large/D', './datasets/notMNIST_large/E', './datasets/notMNIST_large/F', './datasets/notMNIST_large/G', './datasets/notMNIST_large/H', './datasets/notMNIST_large/I', './datasets/notMNIST_large/J']
./datasets/notMNIST_small already present - Skipping extraction of ./datasets/notMNIST_small.tar.gz.
['./datasets/notMNIST_small/A', './datasets/notMNIST_small/B', './datasets/notMNIST_small/C', './datasets/notMNIST_small/D', './datasets/notMNIST_small/E', './datasets/notMNIST_small/F', './datasets/notMNIST_small/G', './datasets/notMNIST_small/H', './datasets/notMNIST_small/I', './datasets/notMNIST_small/J']
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<hr/>
<h2 id="Problem-1---Sample-some-images-in-dataset-and-render-them">Problem 1 - Sample some images in dataset and render them<a class="anchor-link" href="#Problem-1---Sample-some-images-in-dataset-and-render-them">¶</a></h2><p>Let's take a peek at some of the data to make sure it looks sensible. Each exemplar should be an image of a character A through J rendered in a different font. Display a sample of the images that we just downloaded. Hint: you can use the package IPython.display.</p>
<h3 id="For-each-character-folder-in-dataset,-randomly-choose-one-picture-in-it-and-render-them-horizontally">For each character folder in dataset, randomly choose one picture in it and render them horizontally<a class="anchor-link" href="#For-each-character-folder-in-dataset,-randomly-choose-one-picture-in-it-and-render-them-horizontally">¶</a></h3><p>Keypoints:</p>
<ul>
<li>use <code>os.listdir()</code> to get list of file in a folder</li>
<li>use <code>mpl.image.imread</code> to read in image as ndarray, and use <code>plt.imshow</code> to render ndarray as images</li>
</ul>
<hr/>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="o">!</span>ls<span class="w"> </span>./datasets/notMNIST_small/
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_subarea output_stream output_stdout output_text">
<pre><span class="ansi-blue-fg">A</span> B.pickle <span class="ansi-blue-fg">D</span> E.pickle <span class="ansi-blue-fg">G</span> H.pickle <span class="ansi-blue-fg">J</span>
A.pickle <span class="ansi-blue-fg">C</span> D.pickle <span class="ansi-blue-fg">F</span> G.pickle <span class="ansi-blue-fg">I</span> J.pickle
<span class="ansi-blue-fg">B</span> C.pickle <span class="ansi-blue-fg">E</span> F.pickle <span class="ansi-blue-fg">H</span> I.pickle
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">characters</span> <span class="o">=</span> <span class="s1">'abcdefghij'</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="c1"># sub folders to choose images from </span>
<span class="n">image_per_folder</span> <span class="o">=</span> <span class="mi">4</span> <span class="c1"># number of images to show for each folder</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">BASE_PATH</span> <span class="o">=</span> <span class="s1">'./datasets/notMNIST_small/'</span>
<span class="n">list_of_images</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">image_per_folder</span><span class="p">):</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">characters</span><span class="p">:</span>
<span class="n">char_folder</span> <span class="o">=</span> <span class="n">BASE_PATH</span> <span class="o">+</span> <span class="n">char</span> <span class="o">+</span> <span class="s1">'/'</span>
<span class="n">images</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">char_folder</span><span class="p">)</span>
<span class="n">image_file_name</span> <span class="o">=</span> <span class="n">images</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">images</span><span class="p">))]</span>
<span class="n">list_of_images</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char_folder</span> <span class="o">+</span> <span class="n">image_file_name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">showImagesHorizontally</span><span class="p">(</span><span class="n">list_of_files</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">import</span> <span class="n">figure</span><span class="p">,</span> <span class="n">imshow</span><span class="p">,</span> <span class="n">axis</span>
<span class="kn">from</span> <span class="nn">matplotlib.image</span> <span class="kn">import</span> <span class="n">imread</span>
<span class="n">number_of_files</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">list_of_files</span><span class="p">)</span>
<span class="n">num_char</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">characters</span><span class="p">)</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">number_of_files</span><span class="o">/</span><span class="n">num_char</span><span class="p">)):</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_char</span><span class="p">):</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">num_char</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">imread</span><span class="p">(</span><span class="n">list_of_files</span><span class="p">[</span><span class="n">row</span> <span class="o">*</span> <span class="n">num_char</span> <span class="o">+</span> <span class="n">i</span><span class="p">])</span>
<span class="n">imshow</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">'gray'</span><span class="p">)</span>
<span class="n">axis</span><span class="p">(</span><span class="s1">'off'</span><span class="p">)</span>
<span class="n">showImagesHorizontally</span><span class="p">(</span><span class="n">list_of_images</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_png output_subarea">
<img src="data:image/png;base64,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