├── LICENSE
├── README.md
└── mini-lessons
├── data
├── sakura.csv
└── ume.csv
├── text
├── gpt2_fastai.ipynb
├── ja_en_translate.ipynb
└── ymr_classification.ipynb
└── vision
├── image_enhancement_feature_loss.ipynb
├── image_enhancement_gan-5k.ipynb
├── mnist_wgan.ipynb
├── pneumonia.ipynb
└── sakura_ume.ipynb
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Machine Learning Tokyo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MLT-x-fastai
2 | Welcome to the MLTxfastai study sessions. This post is to help you get started with the [fastai MOOC](https://course.fast.ai/) and prepare for our study sessions.
3 |
4 | ## Study Sessions
5 | The goal for these study sessions is to get help with the course materials and most importantly, focusing on building cool stuff with what we learn.
6 |
7 | We will be reviewing some concepts from the lessons from time to time but it will mostly be a free format. You should plan on how you want to spend these sessions. We recommend you watch at least a video or two ahead of the sessions and start thinking about what you want to build to get the most out of your time.
8 |
9 | ## Getting setup
10 | There are quick guides on how to get started with the course materials on the course page. We recommend you use [colab](https://course.fast.ai/start_colab.html) or [kaggle kernels](https://course.fast.ai/start_kaggle.html) since they are free to use. Whatever platform you choose, its important you pick the one that's most comfortable or familiar to you. We don't want to be stuck setting up environments rather, use our time to get our hands dirty writing code
11 |
12 | ## How to do the course
13 | A few helpful guidelines on how to get the most out of the course:
14 | - Watch the videos. But its important to understand that watching videos is not the same as practicing machine learning. Neither is pressing Shift+Enter at every line of code from the lesson notebooks. We suggest you watch a video and try to solve the problem from the lesson with recall. Its okay to take peek when you're doing this, eventually you won't need to.
15 | - fast.ai teaches from a top-down approach which means you learn how to build something first and the specifics behind it later. This can be a bit frustrating at times as most of us come from a traditional bottom-up style (lots of theory first and practicing later). It’s okay to not know everything. No one does at first, you'll pick a lot of practical skills that will help you with theory later. And that's also why we have these study sessions!
16 | - Have a project to work towards. It will make your learning engaging if you do so. A project can be anything you're interested in. If you're a domain expert, think about the problems in your are of expertise. How can deep learning help with solving those problems? It doesn't need to change the world, it just needs to be something you care enough about to want to write a little bit of code everyday.
17 | - Join a community (MLT!!) and find people to collaborate with. Not only is there is a lot to learn by hearing someone else's take at a problem, it is also very motivational and will help you stick with your goals.
18 |
19 | ## What can you build from lessons off a MOOC?
20 | There is an entire [thread](https://forums.fast.ai/t/share-your-work-here/27676/839) in the forums dedicated to what students have created from the lessons. We'll highlight a few to give you an idea and some inspiration
21 |
22 | - [Classify spots in Tokyo](https://github.com/anz9990/ml-carnival/tree/master/tokyo_spots_classifier)
23 | - [Sign Language Predictor](https://github.com/keyurparalkar/ASL-live-predictor)
24 | - [Kuzushiji Classifier](https://github.com/Machine-Learning-Tokyo/kuzushiji-lite) (Advanced)
25 | - [Colorize old images](https://github.com/jantic/DeOldify) (Advanced)
26 |
27 | ## Advice from Jeremy Howard
28 | Twitter thread by @math_rachel
29 | https://twitter.com/math_rachel/status/1104506606740430848
30 |
31 | - Don’t try to stop & understand everything.
32 | - Please run the code, really run the code.
33 | - Pick one project. Do it really well. Make it fantastic.
34 | - It’s okay to feel intimidated, there’s a lot, but just pick one piece & dig in.
35 | - If you’re stuck, keep going.
36 | - The answer to the question “Should I try blah?” is to try blah and see, that’s how you become a good practitioner.
37 | - Don’t be intimidated. It’s meant to be intense.
38 | - Don't waste time getting a ton of data. Start small.
39 | - Perhaps the most important is to get together with others. Learning works a lot better if you have that social experience. Build things. It doesn’t have to be amazing. Just finish something. -- @jeremyphoward
40 |
41 | Accompanying [Thread](https://forums.fast.ai/t/things-jeremy-says-to-do/36682) from forums
42 |
43 | ### Feedback Form:
44 | Please leave your thoughts and comments by filling out this [short survey](https://forms.gle/XkNz3gjgYmjbg9Kw9)
45 |
46 |
--------------------------------------------------------------------------------
/mini-lessons/data/sakura.csv:
--------------------------------------------------------------------------------
1 | https://www.city.toshima.lg.jp/shared/templates/culture_free/images/contents/tanoshimu/someiyoshino/someyoshino_img01.jpg
2 | http://home.bt.com/images/sakura-136417210758702601
3 | https://cdn.shopify.com/s/files/1/0557/0657/products/Prunus-Pandora-Flowers_large.jpg?v=1488077364
4 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/3676-Top-15-Most-Beautiful-Cherry-Blossom-Flowers-ss.jpg
5 | https://static1.squarespace.com/static/557f3adbe4b0e5926bdf4080/557f3b2be4b043c28126204f/5aae55f9352f533ca55df4dc/1539121487642/Screen+Shot+2018-03-18+at+1.04.53+PM.png?format=750w
6 | https://cdn4.vectorstock.com/i/1000x1000/30/48/cherry-blossom-flowers-vector-143048.jpg
7 | https://image.dhgate.com/0x0/f2/albu/g5/M00/7A/BD/rBVaJFkme5eALzWZAAHK-rDau1o735.jpg
8 | https://www.lovethegarden.com/sites/default/files/styles/full_width_700/public/images_and_media/cherry%20blossom.jpg?itok=v8q5gaRd
9 | https://images.pexels.com/photos/992734/pexels-photo-992734.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500
10 | https://bf1-farm3.staticflickr.com/2798/4519121364_8ed29ba5e9_b.jpg
11 | https://www.ny.us.emb-japan.go.jp/japaninfo/2017/03/03.jpg
12 | https://i.ytimg.com/vi/6aNHJXaoJro/maxresdefault.jpg
13 | https://pixfeeds.com/images/topic/6100/1200-6100-cherry-trees-photo3.jpg
14 | https://www.burkesbackyard.com.au/wp-content/uploads/2013/09/Japanese-Cherry-Blossom.jpg
15 | https://i.pinimg.com/originals/73/b3/88/73b388adabb95859eec475df446a6903.jpg
16 | https://i.pinimg.com/originals/c7/01/4f/c7014f0c3f441ec196ec08e4a09f100b.jpg
17 | https://www.theflowerexpert.com/media/images/mostpopularflowers/morepopularflowers/cherryblossom/cherry-blossom1.jpg
18 | https://hips.hearstapps.com/clv.h-cdn.co/assets/16/13/1024x677/gettyimages-478616549_1.jpg?resize=480:*
19 | https://images.bunches.co.uk/product_images/PRODUCT_FLOWERS_Cherry_Blossom_image1.jpg
20 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/higan-cherry-cherry-blossoms-garden-design_11422.jpg
21 | https://i.pinimg.com/originals/28/c1/16/28c116017c4461bfa46a9184743e8b54.jpg
22 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Fugenzo.jpg
23 | https://i.pinimg.com/originals/a9/f1/a9/a9f1a94df66ec0af13394778b98336f9.jpg
24 | https://gurunavi.com/en/japanfoodie/article/sakura_food_and_drinks/img/01_sakura-food.jpg
25 | https://www.thegardenshop.ie/images/detailed/7/cherry-blossom-tree.jpg
26 | https://www.insidejapantours.com/blog/wp-content/uploads/2015/02/flower-01-900x673.jpg
27 | https://travel.home.sndimg.com/content/dam/images/travel/fullrights/2018/3/19/0/CI_National_Park_Service_Yoshino_Cherry_Blossoms.jpg.rend.hgtvcom.966.725.suffix/1521445687494.jpeg
28 | https://www.fiftyflowers.com/site_files/FiftyFlowers/Image/Product/Cherry_Blossom_Branches_Close_350_48b8ffe3.jpg
29 | http://2.bp.blogspot.com/-7p0qdNxhkcw/ULLUyMrX9eI/AAAAAAAADYU/atI_fyhimDk/s1600/cherry_blossom.jpg
30 | https://sherwoodnurseries.ca/wp-content/uploads/2018/06/cherry-blossoms-2182657_960_720.jpg
31 | https://shop.arborday.org/data/default/images/catalog/600/Turnkey/1/Japanese-Flowering-Cherry_2-812.jpg
32 | https://www.ornamental-trees.co.uk/images/prunus-accolade-tree-p202-6562_medium.jpg
33 | http://image.insider-journeys.com/japan/flowering-japanese-cherry-sakura_21.jpg
34 | https://naldzgraphics.net/wp-content/uploads/2013/04/39-pink-flower-cute-cherry-blossom-wallpapers-free.jpg
35 | http://ava7.com/w/flowers/cherry-blossom/cherry-blossom-flower.jpg
36 | http://flowerinfo.org/wp-content/gallery/cherry-blossom-flowers/cherry-blossom-flower-4.jpg
37 | https://www.japan-guide.com/g18/2011_when_01.jpg
38 | https://www.design-a-cake.co.uk/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/f/l/flo-0366-new.jpg
39 | https://www.theflowerexpert.com/media/images/mostpopularflowers/morepopularflowers/cherryblossom/cherry-blossom.jpg
40 | http://3.bp.blogspot.com/-NnJFDdcXGWA/TZbQtPZU2RI/AAAAAAAACU0/BottT_lMSAU/s1600/Sakura-cherry-blossom-pink-flowers.jpg
41 | https://img.freepik.com/free-vector/hand-drawn-cherry-blossom-flower-isolated_53876-8802.jpg?size=338&ext=jpg
42 | https://www.japan-guide.com/g18/2011_trees.jpg
43 | https://i.ytimg.com/vi/dc9LXKxvzwA/hqdefault.jpg
44 | https://cdn.cnn.com/cnnnext/dam/assets/181018215622-japan-cherry-blossoms-1016-restricted-full-169.jpg
45 | https://previews.123rf.com/images/theeraphop/theeraphop1602/theeraphop160200024/57188250-pink-sakura-flower-cherry-blossom.jpg
46 | http://2.bp.blogspot.com/-174AjSOEhCk/UOfASVle5UI/AAAAAAAAHO4/VFKez3s6THg/s1600/Cherry+Blossom+wallpaper+Peach+flowers+%25282%2529.jpg
47 | https://images.pexels.com/photos/71859/spring-flowers-stroll-cherry-blossom-71859.jpeg?cs=srgb&dl=bloom-blooming-blur-71859.jpg&fm=jpg
48 | https://thumbs-prod.si-cdn.com/0PDvpqk3gLLrvz3xbx8v8cUPA9M=/800x600/filters:no_upscale()/https://public-media.si-cdn.com/filer/d0/43/d043ade3-5958-4ad9-ac8b-c6a0d71e9370/16982953858_769860d324_o.jpg
49 | https://www.gardenia.net/rendition.slider_detail/uploads/guide/1479679474-7d817285abe62d110/19633422_m.jpg
50 | https://www.jrailpass.com/blog/wp-content/uploads/2017/01/cherry-blossom-e1485856509786.jpg
51 | https://c-lj.gnst.jp/public/article/detail/a/00/01/a0001031/img/en/a0001031_parts_589d412b17ace.jpg?20181205112727
52 | https://i.ytimg.com/vi/c77puBw4X0w/hqdefault.jpg
53 | https://sociorocketnewsen.files.wordpress.com/2016/04/fd-0.png?w=640&h=319
54 | https://timedotcom.files.wordpress.com/2017/03/gettyimages-518005404.jpg
55 | https://www.wikihow.com/images/thumb/6/6e/Identify-Cherry-Trees-Step-1-Version-4.jpg/aid2219409-v4-728px-Identify-Cherry-Trees-Step-1-Version-4.jpg
56 | http://earthporm.com/wp-content/uploads/2014/05/beautiful-cherry-blossom-09.jpg
57 | https://cherryblossomwatch.com/wp-content/uploads/2018/04/dc-cherry-blossom-watch-update-april-4-2018-07.jpg
58 | https://images.unsplash.com/photo-1495783243964-e49671e65ebd?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80
59 | https://bf1-farm2.staticflickr.com/1441/26149858596_5d9d3999f2_b.jpg
60 | https://clarenbridgegardencentre.ie/wp-content/uploads/2016/11/Prunus-Kanzan-600-e1478797505838.jpg
61 | https://gaijinpot.scdn3.secure.raxcdn.com/app/uploads/sites/4/2015/02/sakura-1024x768.jpg
62 | https://d6p0gevo8s9lm.cloudfront.net/media/catalog/product/cache/5/image/9df78eab33525d08d6e5fb8d27136e95/p/l/plantstore-flowering-cherry-blossom.jpg
63 | http://sanctum-inle-resort.com/wp-content/uploads/2015/11/Sanctum_Inle_Resort_Myanmar_Flower_Macro_Cherry_Blossom.jpg
64 | http://www.aucklandbotanicgardens.co.nz/media/1093/spring-blossom-valley-cherry-blossom.jpg
65 | https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/cherry-blossom-sakura-tea-1519936965.jpg?crop=1xw:1xh;center,top&resize=480:*
66 | https://designemerald.com/wp-content/uploads/2013/04/Close-Up-Macro-Nature-Flower-Cherry-Blossom-Wallpaper.jpg
67 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/prunus-serrulata-kwanzan-kanzan-flowering-cherry-tree-shutterstock-com_12577.jpg
68 | https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Chidorigafuchi_sakura.JPG/1200px-Chidorigafuchi_sakura.JPG
69 | https://cdn.gardenista.com/wp-content/uploads/2017/04/bbg-cherry-tree-kuramayama-blossom-alison-engstrom-1466x2196.jpg
70 | https://c-lj.gnst.jp/public/article/detail/a/00/01/a0001031/img/en/a0001031_parts_589d4125ac1c7.jpg?20181205112727
71 | https://images-na.ssl-images-amazon.com/images/I/51UIvf9ntnL._SY450_.jpg
72 | https://www.vcbf.ca/wp-content/uploads/2013/07/20080221_chilco_accolade_cutler_2088-r.jpg
73 | http://www.bloom.uk.com/wcsstore/ExtendedSitesCatalogAssetStore//images/ec2iextralarge/MULTI_PRODUCT_IMAGES/2058581-CO.jpg
74 | https://i.pinimg.com/originals/21/70/ef/2170efbacdab7b765ebbd4a9c2619e39.jpg
75 | http://images6.fanpop.com/image/photos/34600000/Pink-Cherry-Blossom-flowers-34658281-1200-803.jpg
76 | https://www.bakker.com/INTERSHOP/static/WFS/org-Site/b2c-b2c-website/org-b2c-b2c-website/en_GB/Know%20How/Botanical%20picture%20library/mainimages/pruningjapanesefloweringcherry-mainimage.jpg
77 | http://www.channelnewsasia.com/blueprint/servlet/image/8763912/16x9/2002/1335/60897ff786e4e879808977fae6a4be9f/xT/sakura-2017---4---3592202.png
78 | https://cdn.shopify.com/s/files/1/0557/0657/products/Kanzan-Flowering-Cherry-Tree_large.jpg?v=1500808191
79 | http://image.insider-journeys.com/japan/cherry-blossom-close-up_19.jpg
80 | https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/USA-Cherry_Blossom0.jpg/339px-USA-Cherry_Blossom0.jpg
81 | https://smallimg.pngkey.com/png/small/5-56354_blossom-clipart-sakura-flower-cherry-blossom-flower-clipart.png
82 | http://www.thetreecenter.com/wp-content/uploads/yoshino-cherry-blossom-flowers.jpg
83 | https://i.ytimg.com/vi/EE4XxrJPflc/maxresdefault.jpg
84 | http://www.thehappybike.com/wp-content/uploads/2018/11/cherry-blossom-flower-cherry-bloom-flowers-cherry-bloom-flowers-crayola-fish-coloring-pages.jpg
85 | https://images.unsplash.com/photo-1490772888775-55fceea286b8?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1000&q=80
86 | https://www.washingtonpost.com/resizer/ptYrYemiic56KlNEPa4smc3N_uE=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/2EJGK2Y4ZM3C7H2YAE3YXYJX5Y.jpg
87 | https://images.immediate.co.uk/volatile/sites/18/2018/07/Cherry_Blossom_Batsford_238v2-04e8dbf.jpg?quality=45&crop=23px,465px,3098px,1333px&resize=960,413
88 | http://fc07.deviantart.net/fs43/f/2009/093/8/b/Cherry_Blossom_Wallpaper_by_WindyLife.jpg
89 | https://www.gardenia.net/rendition.slider_detail/uploads/guide/1479411809-6349cbde85ac198df/54868766_m.jpg
90 | https://resources.matcha-jp.com/old_thumbnails/720x2000/1709.jpg
91 | https://www.ctvnews.ca/polopoly_fs/1.4269566.1548449924!/httpImage/image.jpg_gen/derivatives/landscape_960/image.jpg
92 | https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/cherry-blossoms-trivia-facts-1519937792.jpg
93 | https://cherryblossomwatch.com/wp-content/uploads/2017/03/cherry-blossoms-washington-dc-march-08-2017-26.jpg
94 | https://www.telegraph.co.uk/content/dam/Travel/Destinations/Asia/Japan/cherry-blossom-tokyo.jpg
95 | https://www.vcbf.ca/wp-content/uploads/2013/12/ociv-cover.jpg
96 | https://image.shutterstock.com/z/stock-vector-banners-with-beautiful-cherry-blossom-flowers-vector-384397189.jpg
97 | http://ellenbytreefarm.com/cms-content/products/scaled-prunus-blireana-cherry-blossom-plum-57ccb34d9377f.jpg
98 | https://static01.nyt.com/images/2018/10/19/world/19xp-cherryblossoms-print/19xp-cherryblossoms-1-articleLarge.jpg?quality=75&auto=webp&disable=upscale
99 | https://dynaimage.cdn.cnn.com/cnn/q_auto,w_412,c_fill,g_auto,h_232,ar_16:9/http%3A%2F%2Fcdn.cnn.com%2Fcnnnext%2Fdam%2Fassets%2F180406093804-cherry-blossoms-washington-tidal-basin-2018.jpg
100 | https://i.ebayimg.com/images/g/lmkAAOSwDMNbC84Z/s-l300.jpg
101 | https://img1.southernliving.timeinc.net/sites/default/files/styles/landscape_3_2/public/image/2016/01/main/0bfebd49376301569511_11321_0.jpg
102 | https://www.provenwinners.com/sites/provenwinners.com/files/imagecache/low-resolution/ifa_upload/yuki_cherry_blossom_deutzia-1-3.jpg
103 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Somei-Yoshino.jpg
104 | https://gardentherapy.ca/wp-content/uploads/2016/04/Forcing-Flowering-Cherry-Blossom-Branches-.jpg
105 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Somei-Yoshino.jpg
106 | https://press.ikidane-nippon.com/wordpress/wp-content/uploads/2018/03/11-4.jpg
107 | https://i.ebayimg.com/images/g/lmkAAOSwDMNbC84Z/s-l300.jpg
108 | https://www.saga.co.uk/contentlibrary/saga/publishing/verticals/home-and-garden/gardening/plants/trees/cherry-blossom-trees.jpg
109 | https://images.pexels.com/photos/548375/pexels-photo-548375.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500
110 | http://2.bp.blogspot.com/-DgN2lLC5ZaU/ToPPAH40ruI/AAAAAAAAACo/0YfaPhjcagY/s1600/JapaneseCherryBlossoms.jpg
111 | https://timedotcom.files.wordpress.com/2018/10/gettyimages-940942958.jpg
112 | http://www.origami-instructions.com/images/easy-cherry-blossom/thumbnails/09-easy-cherry-blossom.jpg
113 | https://www.vcbf.ca/wp-content/uploads/2013/07/20100315_pred62_afterglow_eng_4690.jpg
114 | https://i.ytimg.com/vi/Vyw4y58vTfU/maxresdefault.jpg
115 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/prunus-ichiyo-ornamental-cherry-tree-shutterstock-com_12579.jpg
116 | https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Newark_cherry_blossoms.jpg/300px-Newark_cherry_blossoms.jpg
117 | http://3.bp.blogspot.com/-z_5xZdK-2aI/UvqEIEdsy6I/AAAAAAAAKWQ/457TmuU58ZI/s1600/1+Cherry+blossom+tissue+paper+flower+kids+craft+(tree+printable+included).JPG
118 | https://www.wyevalegardencentres.co.uk/ccstore/v1/images/?source=/file/v5483876464925226421/products/p0850029741.01.jpg&height=300&width=300
119 | https://images.ctfassets.net/0uov5tlk8deu/TOr7RMGqN98KcqmTNFZtA/f1c2f58d122ed5c3d2a0a7e238171abc/pexels-photo-356269.jpeg
120 | https://i.cbc.ca/1.4648393.1525445529!/fileImage/httpImage/image.jpeg_gen/derivatives/original_780/cherry-blossoms-high-park-2.jpeg
121 | http://home.bt.com/images/what-is-sakura-136417210763203901-170410144652.jpg
122 | https://images.unsplash.com/photo-1460644212565-a64ce7c7094c?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80
123 | https://www.keele.ac.uk/arboretum/nationalcollectionoffloweringcherries/cherry-button-aboutcherries.jpg
124 | https://www.rhs.org.uk/getmedia/2003258a-4ec4-4dd1-b0ec-1e2462ce3fa7/Prunus-The-Bride.jpg?width=800&height=533
125 | https://ae01.alicdn.com/kf/HTB1BPB0SXXXXXaJaXXXq6xXFXXX1/Decorative-Artificial-Silk-Flowers-Cherry-Blossom-wintersweet-plum-blossom-For-Christmas-Wedding-Home-Decoration-Flower-Floral.jpg_640x640.jpg
126 | https://cdn-images-1.medium.com/max/2400/1*HXPOvxCw7Qu96z3aKG5PTA.jpeg
127 | https://www.treesdirect.co.uk/wp-content/uploads/2018/02/Great-White-Cherry-Flowering-Blossom.jpg
128 | https://alljapantours.com/php17/interfaceMaster/blogMaster/img17/photo/blog/src/COFJ182451210.jpg
129 | https://media.tenor.com/images/c44acdb695ea06e0aae1795054c9b1eb/tenor.gif
130 | https://img.freepik.com/free-photo/3d-render-cherry-blossom-bokeh-lights-background_1048-6029.jpg?size=626&ext=jpg
131 | https://images.immediate.co.uk/volatile/sites/18/2018/07/Cherry_Blossom_Batsford_238v2-04e8dbf.jpg?quality=45&crop=23px,465px,3098px,1333px&resize=960,413
132 | https://assets.marthastewart.com/styles/wmax-520-highdpi/d37/exquisitebookofpaperflowers_p049-0414/exquisitebookofpaperflowers_p049-0414_vert.jpg?itok=fLkr_kl-
133 | https://s3-us-west-2.amazonaws.com/uw-s3-cdn/wp-content/uploads/sites/6/2017/03/04142359/gerb-cherryTILE2.jpg
134 | https://cherryblossomwatch.com/wp-content/uploads/2017/03/cherry-blossoms-washington-dc-march-08-2017-26.jpg
135 | https://images.pexels.com/photos/701816/pexels-photo-701816.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500
136 | https://www.woodlandtrust.org.uk/media/100078467/WildCherry03.jpg?cb=2054381799&preset=gallery-tab-main-image
137 | https://img.culturacolectiva.com/content/2017/06/cherry-blossom-tattoos6.jpg
138 | http://cdn3.craftsy.com/blog/wp-content/uploads/2015/01/cherry-blossom-frame-cake-close-juniper-cakery-600.jpg
139 | https://c-lj.gnst.jp/public/article/detail/a/00/01/a0001031/img/en/a0001031_parts_589d411f1df56.jpg?20181205112727
140 | https://images.bunches.co.uk/product_images/460x460/PRODUCT_FLOWERS_Cherry_Blossom_image3_460x460.jpg
141 | https://img1.southernliving.timeinc.net/sites/default/files/styles/4_3_horizontal_inbody_900x506/public/image/2016/01/main/637690137b2cc3938295_9968_0.jpg?itok=Dj_vtetS
142 | https://gardenerspath.com/wp-content/uploads/2015/01/Okame-cherry-blossom.jpg
143 | https://media.beliefnet.com/~/media/photos-with-attribution/nature/cherryblossomtreecreditshutterstockcom.jpg
144 | https://www.gardenia.net/visual-editor-uploads/Prunus%20serrulata%20shirotae4.jpg
145 | http://ellenbytreefarm.com/cms-content/products/scaled-prunus-blireana-cherry-blossom-plum-57ccb34e493ba.jpg
146 | https://www.telegraph.co.uk/content/dam/Travel/2018/March/kimono-cherry-blossom-japan.jpg
147 | https://png.pngtree.com/element_origin_min_pic/16/06/23/18576bba44799ed.jpg
148 | https://okinawa-labo.com/wp-content/uploads/2015/01/0fae714b6d03a4a18e427ba925c8606d_s.jpg
149 | https://i1.wp.com/notwithoutmypassport.com/wp-content/uploads/2016/04/sakura-flower-japan.jpg?resize=740%2C495&ssl=1
150 | http://100percentsport.org/wp-content/uploads/2018/03/japanese-cherry-blossom-garden-wallpaper-beautiful-spring-blossoms-bicycle-with-flowers-cherry-blossoms-home-design-app-android-free.jpg
151 | https://static1.squarespace.com/static/58586fa5ebbd1a60e7d76d3e/t/5913242f893fc0238b57741b/1494426682302/
152 | https://thumbs.dreamstime.com/z/real-pink-sakura-flowers-cherry-blossom-close-up-naka-meguro-tokyo-japan-105855264.jpg
153 | https://bf1-farm6.staticflickr.com/5021/5662129526_42f6eae435_b.jpg
154 | https://thestreettree.files.wordpress.com/2018/03/prunus-x-subhirtella-autumnalis-flowers.jpg?w=825&h=510&crop=1
155 | https://www.tripsavvy.com/thmb/hPkP6mbb0YnBxh-dKQM3P-VXopw=/350x0/filters:no_upscale():max_bytes(150000):strip_icc()/Cheryy_Blossoms_2014-31-56a239505f9b58b7d0c80bf3.jpg
156 | https://www.rhs.org.uk/getmedia/1db56811-4fec-463e-bc15-4f68b40ce59d/Prunus-Kursar-_WSYD0011414.jpg?width=800&height=533
157 | https://www.vcbf.ca/wp-content/uploads/2013/07/20080409_e45_akebono_mw.su_134_3464.jpg
158 | http://images5.fanpop.com/image/photos/25300000/Beautiful-Flowers-cherry-blossom-25312256-600-375.jpg
159 | https://media.globalcitizen.org/thumbnails/2d/c4/2dc4cb74-6162-45bf-9aeb-1c0bbaf75804/cherry-blossoms-japan.jpg__1500x670_q85_crop_subsampling-2.jpg
160 | https://get.pxhere.com/photo/tree-branch-blossom-plant-flower-petal-spring-produce-color-colorful-pink-cherry-blossom-flowers-bud-japanese-cherry-trees-macro-photography-flowering-plant-japanese-cherry-lenz-flowering-time-japanese-flowering-cherry-ornamental-cherry-land-plant-1340465.jpg
161 | https://www.ashridgetrees.co.uk/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/k/a/kanzan_cherry_blossom.jpg
162 | https://cdn.shopify.com/s/files/1/0557/0657/products/Prunus-Autumnalis-Rosea-Flowers.jpg?v=1505858599
163 | https://images.unsplash.com/photo-1524863252914-21a43a07908a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80
164 | https://thetravelintern.com/wp-content/uploads/2019/01/Cherry-Blossom-flowers-in-South-korea-South-Korea-Cherry-Blossom-Guide-2019.jpg
165 | https://d6p0gevo8s9lm.cloudfront.net/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/t/r/triloba-blooms.jpg
166 | https://cdn.koreatraveleasy.com/wp-content/uploads/2019/02/25162202/spring-cherry-blossoms-2019.jpg
167 | https://hgtvhome.sndimg.com/content/dam/images/grdn/fullset/2013/5/25/0/img-2283-dfd61f3f0000.jpg.rend.hgtvcom.616.462.suffix/1521231597076.jpeg
168 | https://notwithoutmypassport.com/wp-content/uploads/2016/04/japanese-cherry-blossoms-ryoanji-temple-kyoto.jpg
169 | https://media.istockphoto.com/photos/japanese-cherry-blossom-flowers-in-the-white-picture-id511659188?k=6&m=511659188&s=612x612&w=0&h=web-Kb_tlYmM-aKP6dOuAXaHwbxht3P3QJEBbzjOFd4=
170 | https://img.washingtonpost.com/wp-apps/imrs.php?src=https://img.washingtonpost.com/blogs/capital-weather-gang/files/2016/03/TidalBasin3-lr.jpg&w=1484
171 | https://cherryblossomwatch.com/wp-content/uploads/2018/03/dc-cherry-blossom-watch-march-31-2018-20.jpg
172 | https://www.nps.gov/common/uploads/grid_builder/cherryblossom/crop16_9/54B39E94-1DD8-B71B-0BCC3578015B1520.jpg?width=465&quality=90&mode=crop
173 | https://images.japan-experience.com/guide-japon/18181/s380x280/sakura-mt-yoshino.jpg
174 | https://c.pxhere.com/photos/5c/55/japanese_cherry_trees_flowers_japanese_flowering_cherry_ornamental_cherry_japanese_cherry_cherry_blossom_flowering_time_tree-974655.jpg!d
175 | https://media.springernature.com/m685/springer-static/image/art%3A10.1038%2Fs41598-018-19968-w/MediaObjects/41598_2018_19968_Fig1_HTML.jpg
176 | https://image.shutterstock.com/display_pic_with_logo/4237615/1038964567/stock-photo-beautiful-flowers-cherry-blossom-on-softly-blurred-background-1038964567.jpg
177 | https://www.gardenia.net/rendition.slider_detail/uploads/plant/1478649354-fc0af6f672624b35f/Prunus%20asano.jpg
178 | https://www.thespruce.com/thmb/uWPIjI41wQK4VbM9GP3VjE6cSPc=/3864x2576/filters:no_upscale()/pink-cherry-blossom-847534886-5c1bba78c9e77c0001555b43.jpg
179 | https://images.rove.me/w_1920,q_85/xlju60xwcpx4nqi90b3n/vancouver-vancouver-cherry-blossom-festival.jpg
180 | https://images.immediate.co.uk/volatile/sites/18/2018/07/Cherry_Blossom_Batsford_211v2-56cf014.jpg?quality=90&lb=620,413&background=white
181 | https://www.nippon.com/en/ncommon/contents/features/53415/53415.jpg
182 | https://www.vcbf.ca/wp-content/uploads/2018/07/Haiku-Header_2018-1024x470.jpg
183 | http://www.origami-instructions.com/images/easy-cherry-blossom/thumbnails/13-easy-cherry-blossom.jpg
184 | https://images.homedepot-static.com/productImages/ad6ad1f3-2a86-4cdd-96cf-76e0e24a0fb2/svn/proven-winners-shrubs-deuprc1046101-64_400_compressed.jpg
185 | http://cdn2.stylecraze.com/wp-content/uploads/2014/05/2757-Most-Beautiful-Cherry-Blossom-Flowers.jpg
186 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Yamazakura.jpg
187 | https://gardentherapy.ca/wp-content/uploads/2015/02/Beautiful-cherry-blossom-branch.jpg
188 | https://assets.visitphilly.com/wp-content/uploads/2018/02/Cherry-Blossoms-West-Fairmount-Park-M-Fischetti-VP-2200x1237.jpg
189 | https://media.timeout.com/images/105376606/630/472/image.jpg
190 | https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA0Ny8zNzMvb3JpZ2luYWwvNS1wdWZmeS13aGl0ZS5KUEc=
191 | https://c-lj.gnst.jp/public/article/detail/a/00/01/a0001031/img/en/a0001031_parts_589d41021a75b.jpg?20181205112727
192 | https://www.woodlandtrust.org.uk/media/100741886/wild-cherry-blossom-paul-sterry-NPL.jpg?cb=-879973055&preset=gallery-tab-main-image
193 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/weeping-cherry-prunussubhirtella-garden-design_11423.jpg
194 | https://www.japan-guide.com/thumb/interest_sakura_1680.jpg
195 | https://cdn-image.travelandleisure.com/sites/default/files/1543859619/seoul-south-korea-cherry-blossoms-gyeongbokgung-palace-CHERRYBLOSSOMS1218.jpg
196 | https://www.ornamental-trees.co.uk/images/products/medium/1341311378-28908100.jpg
197 | https://i.pinimg.com/236x/9a/04/f2/9a04f2927e753d38880e16834bc1873b--little-flowers-blue-flowers.jpg
198 | https://img1.southernliving.timeinc.net/sites/default/files/styles/landscape_3_2/public/image/2016/01/main/e28e2dc3ca3b6bb78295_9968.jpg
199 | https://i2.wp.com/oregoncoastalflowers.com/wp-content/uploads/2015/03/white-flowering-cherry-branches.jpg?fit=1000%2C662&ssl=1
200 | https://cdn-images-1.medium.com/max/1600/1*okKs-fSHvw3kL3yobzg_4A.jpeg
201 | https://i.ytimg.com/vi/iwUwTxJ2OmU/maxresdefault.jpg
202 | https://unplan.jp/wp-content/uploads/124D151A-474F-408E-8BC5-15C005B62398.jpg
203 | https://image.shutterstock.com/image-photo/beautiful-pink-cherry-blossom-isolated-260nw-562327900.jpg
204 | https://www.riversidegardencentre.co.uk/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/g/b/gb1786sg_180_cherry_blossom_pink_800x800.jpg
205 | https://www.gardensbythebay.com.sg/content/dam/gbb/whats-on/calendar-of-events/2019/sakura/sakura-garden-trail1-1670x940.jpg
206 | https://static.tripzilla.com/thumb/8/0/102016_800x.jpg
207 | http://wallpaperlepi.com/wp-content/uploads/2014/10/Pink-Cherry-Blossom-Wallpaper-for-iPhone.jpg
208 | https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA0Ny8zNzQvb3JpZ2luYWwvNi1mdWxsLWJsb29tLkpQRw==
209 | https://m.media-amazon.com/images/I/71z6ILpQPIL._SR500,500_.jpg
210 | http://www.miho.or.jp/wp-content/uploads/2017/04/dummy04.jpg
211 | http://4.bp.blogspot.com/--LpmYHfbepE/T_Wj_rWi_WI/AAAAAAAAAMQ/7LOZAWkwc-c/s1600/cherry+blossom+pictures+1.jpg
212 | https://gardenerspath.com/wp-content/uploads/2015/01/Weeping-Cherry-Blooms-2.jpg
213 | https://washington.org/s3/files/styles/editorial_wide/public/markeisenhower-cherry-blossoms-framing-jefferson-memorial-visitors-paddleboats_mydccool-spring.jpg?itok=Dqu5QMnQ
214 | https://www.travelking.com.tw/eng/tourguide/flowers/images/spring/wulai-sakura.jpg
215 | https://media.timeout.com/images/105188374/image.jpg
216 | https://www.ashridgetrees.co.uk/media/catalog/product/cache/1/small_image/165x330/9df78eab33525d08d6e5fb8d27136e95/p/r/xprunus_okame_7332_5.jpg.pagespeed.ic.WJf6WAFO0w.jpg
217 | https://image.shutterstock.com/image-photo/beautiful-flowers-cherry-blossom-on-260nw-587497511.jpg
218 | https://images.pexels.com/photos/1023953/pexels-photo-1023953.jpeg?cs=srgb&dl=beautiful-bloom-blooming-1023953.jpg&fm=jpg
219 | https://icon2.kisspng.com/20180225/hkw/kisspng-national-cherry-blossom-festival-flower-cherry-blossoms-5a9368e68fb9e7.4140366015196100865887.jpg
220 | https://www.keele.ac.uk/arboretum/nationalcollectionoffloweringcherries/cherry-button-visiting.jpg
221 | https://www.thespruce.com/thmb/H8LG7gE3rwB7HQCT3bu1Oi-e2cQ=/450x0/filters:no_upscale():max_bytes(150000):strip_icc()/142579212-58a480e75f9b58819ca5f452.jpg
222 | https://cdn-image.travelandleisure.com/sites/default/files/styles/1600x1000/public/1547588463/japan-cherry-blossoms-CHERRYFORECAST119.jpg?itok=hgYkKTPi
223 | https://images.immediate.co.uk/volatile/sites/18/2018/07/Cherry_Blossom_Batsford_258v2-a63d49e.jpg?quality=90&lb=620,413&background=white
224 | https://www.bonsaiempire.com/images/advanced/cherry/blossom.jpg
225 | https://okinawa-labo.com/wp-content/uploads/2015/12/okinawa-February-sightseeing-10_R.jpg
226 | https://www.nippon.com/en/ncommon/contents/features/53416/53416.jpg
227 | https://i1.wp.com/boutiquejapan.com/wp-content/uploads/2018/01/Japan-cherry-blossoms-sakura-hanami-season-up-close-bloom.jpg?resize=968%2C646&ssl=1
228 | https://www.petals.com/files/imagesSF/product/750/stb166-by_zoom.jpg
229 | https://www.oki-islandguide.com/wp-content/uploads/2016/12/KEN6659.jpg
230 | https://media.nbcwashington.com/images/652*367/cherry+blossoms.jpg
231 | https://previews.123rf.com/images/mayboro/mayboro1103/mayboro110300059/9208711-cherry-blossoms-on-a-black-background.jpg
232 | http://www.olbrich.org/visit/images/PrunusAccolade-AccoladeFloweringCherry-SerenityGarden.jpg
233 | https://www.wyevalegardencentres.co.uk/ccstore/v1/images/?source=/file/v7277358033728851453/products/p0850028201.01.jpg&height=300&width=300
234 | https://cdn.shopify.com/s/files/1/0557/0657/products/Beni-Yutaka-Flowering-Cherry-Tree_large.jpg?v=1488076828
235 | https://thestreettree.files.wordpress.com/2018/03/prunus-x-subhirtella-autumnalis-rosea-e5-11-flowers-p1280945.jpg?w=660&h=660
236 | https://3ywuivv09l-flywheel.netdna-ssl.com/wp-content/uploads/2019/03/IMG_1242.jpg
237 | https://greenleafnurseries.co.nz/wp-content/uploads/2015/08/p-4158-Prunus-Accolade-(2)-300x300.jpg
238 | https://img.freepik.com/free-vector/hand-drawn-cherry-blossom-branch_23-2148076928.jpg?size=626&ext=jpg
239 | https://www.seejapan.co.uk/images/default-source/default-album/hirosakijyo_15.jpg?sfvrsn=0&MaxWidth=1000&MaxHeight=600&ScaleUp=false&Quality=High&Method=ResizeFitToAreaArguments&Signature=0FEB630025EC4167C1689242224789A9A4F2B4DC
240 | https://press.ikidane-nippon.com/wordpress/wp-content/uploads/2018/03/10-6.jpg
241 | https://www.japan-guide.com/blog/sakura18/g/180319_tokyo_06.jpg
242 | https://i1.wp.com/notwithoutmypassport.com/wp-content/uploads/2016/04/meaning-of-cherry-blossoms-in-japan.jpg?resize=740%2C486&ssl=1
243 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Ichiyo.jpg
244 | https://cf.ltkcdn.net/garden/images/std/176038-284x425-flowering-cherry.jpg
245 | https://www.washingtonpost.com/resizer/AVzXUQA6eywx_FRoTj77yO0goqc=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/UC2IHDGN2EZATLQYMSKIDSAKSE.jpg
246 | https://png.pngtree.com/png-clipart/20190118/ourmid/pngtree-antiquity-chinese-style-ancient-scene-traditional-chinese-painting-png-image_461208.jpg
247 | https://images.unsplash.com/photo-1452723311049-05685d7428ce?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80
248 | https://cherryblossomwatch.com/wp-content/uploads/2017/03/cherry-blossoms-washington-dc-march-12-2017-20.jpg
249 | https://media.fromthegrapevine.com/wp-content/uploads/2014/06/bell-flower-cherry.jpg
250 | https://www.blenderguru.com/s/Flowers0196_11_M_pink3-wj44.png
251 | https://i.ytimg.com/vi/nmBi8YCmREo/hqdefault.jpg
252 | https://pbs.twimg.com/profile_images/568218018908368896/4d_fnpTe_400x400.png
253 | https://cdn.webvanta.com/000000/51/74/sm/uploads/guide/1479486962-277d4aba71dd0b294/32063884_m.jpg
254 | http://www.sakurainhighpark.com/wp-content/uploads/2014/05/Sakura-HighPark-stage6.jpg
255 | https://image.shutterstock.com/image-photo/gorgeous-chinese-red-cherry-blossom-260nw-1311164405.jpg
256 | https://www.washingtonwalks.com/sites/default/files/Blosssom%20Secrets%20Stroll%20by%20AnupaAsokan%20for%20NOAA.jpg
257 | https://gardentherapy.ca/wp-content/uploads/2016/04/How-to-Force-flowering-branches-in-water-for-Indoor-Arrangements-683x1024.jpg
258 | https://media.timeout.com/images/103173139/630/472/image.jpg
259 | https://cms.qz.com/wp-content/uploads/2018/10/sakura1-e1539878115499.jpg?quality=75&strip=all&w=410&h=218
260 | https://www.travelingmom.com/wp-content/uploads/2019/01/Kanzan-cherry-tree-cherry-blossoms-in-nyc.jpg
261 | https://wallpaperaccess.com/full/33912.jpg
262 | https://cdn-image.travelandleisure.com/sites/default/files/styles/1600x1000/public/1457128345/Cherry-Blossoms-Washington-DC-02-BLOOMS0316.jpg?itok=Qynuontc
263 | https://icon2.kisspng.com/20180219/dhq/kisspng-flower-cherry-blossom-cherry-blossoms-5a8ae6909d3300.2957390615190524326439.jpg
264 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2017/04/Tsurugaoka-Hachimangu-Shrine-Sakura-770x578.jpg
265 | https://image.shutterstock.com/z/stock-photo-blooming-japan-sakura-pink-flowers-cherry-tree-branch-selective-focus-408760063.jpg
266 | https://arbordayblog.org/wp-content/uploads/2016/03/Japanese-Cherry-Blossom-1024x576.jpg
267 | https://img.loccitane.com/ocms/img/lib/_2013_StaticContent/OCC_a58d1d5915794a599d16ae28faff0a61.jpg
268 | http://www.bbc.co.uk/staticarchive/5b4bb84f62a60ff1abd06a999386d35756ca1180.jpg
269 | https://cdn-images-1.medium.com/max/1600/1*dCSXfYZT6rRnw3-HPcLtTA.jpeg
270 | https://travel.home.sndimg.com/content/dam/images/travel/fullrights/2018/3/19/0/CI_National_Park_Service_Kwanzan_Cherry_Blossoms.JPG.rend.hgtvcom.966.644.suffix/1521445687736.jpeg
271 | https://www.barcham.co.uk/assets/uploads/products/Prunus-Kanzan---main.jpg
272 | https://cdn2.bigcommerce.com/server2000/xbzs5402/products/108/images/5313/4_Generic_Single_Photo_003__92615.1450321508.1280.1280.jpg?c=2
273 | https://www.keele.ac.uk/arboretum/nationalcollectionoffloweringcherries/cherry-button-enquiries.jpg
274 | https://www.vcbf.ca/wp-content/uploads/2013/03/plumblossomimg_3389byjt.jpg
275 | https://www.palmers.co.nz/wp-content/uploads/bfi_thumb/Web-story-featured-image-2-niqnolkrtevogdyt7fm3y26st6ghx4wsb8w7o3r4c8.jpg
276 | https://www.centralpark.com/downloads/1179/download/cherry-blossom-tree.jpe?cb=783665e2e86dabe11fdbe675f24e26c4
277 | https://gardenerspath.com/wp-content/uploads/2015/01/Yoshino-cherry-blossom.jpg
278 | http://www.miho.or.jp/wp-content/uploads/2017/04/dummy07.jpg
279 | https://naldzgraphics.net/wp-content/uploads/2013/04/30-pretty-little-flower-cherry-blossom-wallpapers-free.jpg
280 | https://www.wyevalegardencentres.co.uk/ccstore/v1/images/?source=/file/v5372297553826324730/products/p0850050483.01.jpg&height=300&width=300
281 | https://www.exploregeorgia.org/sites/default/files/styles/slideshow_large/public/legacy_images/cherry-blossoms-in-macon-1417625042.jpg?itok=Hhx-sD1m
282 | https://img-aws.ehowcdn.com/350x235p/photos.demandstudios.com/getty/article/81/236/87524419_XS.jpg
283 | https://images.immediate.co.uk/volatile/sites/18/2018/07/Cherry_Blossom_Batsford_483v2-7007388.jpg?quality=90&lb=620,413&background=white
284 | https://static1.squarespace.com/static/5755f26137013b8af2444eed/t/58d1e0b586e6c0e4ce1f8202/1490149596434/10+Places+to+See+The+Cherry+Blossoms+in+Bloom+in+Paris?format=750w
285 | http://getdrawings.com/image/japanese-cherry-blossom-flower-drawing-52.jpg
286 | https://www.japan-guide.com/g18/2011_when_02.jpg
287 | http://www.origami-instructions.com/images/easy-cherry-blossom/thumbnails/23-easy-cherry-blossom.jpg
288 | https://img.travel.rakuten.co.jp/mytrip/content/trend/hanami-tokyo/images/key.jpg
289 | https://cdn.shopify.com/s/files/1/0557/0657/products/Prunus-Longpipes-Flowers_large.jpg?v=1488077745
290 | https://cf.ltkcdn.net/garden/images/std/176040-400x259-flowering-cherry-colorful-leaves.jpg
291 | https://10mag.com/wp-content/uploads/2017/04/2Z0A8087.jpg
292 | https://images.pexels.com/photos/66304/mandulavirag-almond-flowers-spring-66304.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500
293 | http://www.riken.jp/~/media/riken/import/en/info/release/press/2010/100114_2/image/01-2.jpg
294 | http://www.city.tatsuno.lg.jp/english/tatsunoshi/images/isakura.jpg
295 | https://press.ikidane-nippon.com/wordpress/wp-content/uploads/2018/03/1-8.jpg
296 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/prunus-yedoensis-akebono-yoshino-cherry-shutterstock-com_12575.jpg
297 | https://www.thechinaguide.com/uploads/edt/2/5aab7f562d-cherry-blossom.jpg
298 | http://plants.squakmtnursery.com/Content/Images/Photos/F544-13.jpg
299 | https://media.cntraveler.com/photos/5c3f46c2a5c1d51f43a9d220/4:3/w_480,c_limit/Japan_Cherry-Blossoms_GettyImages-179989245.jpg
300 | https://cdn2.stylecraze.com/wp-content/uploads/2014/05/Shibazakura.jpg
301 | https://s3-us-west-2.amazonaws.com/uw-s3-cdn/wp-content/uploads/sites/6/2018/02/04130325/cherries.jpeg
302 | https://img1.southernliving.timeinc.net/sites/default/files/styles/story_card_hero/public/image/2016/01/main/df92f4d541a3e5d78295_9968_2.jpg?itok=7-r3CVgP
303 | https://www.seejapan.co.uk/images/default-source/default-album/cherry-blossom-festival-in-fukuoka-cropped.jpg?sfvrsn=0&MaxWidth=1000&MaxHeight=600&ScaleUp=false&Quality=High&Method=ResizeFitToAreaArguments&Signature=1D3B36B98A42856F286BC04145975BE84B81E2B9
304 | https://cherryblossomwatch.com/wp-content/uploads/2017/04/kwanzan-cherry-blossoms-09.jpg
305 | https://japan-magazine.jnto.go.jp/jnto2wm/wp-content/uploads/1202_sakura_main3.jpg
306 | https://cdn.pixabay.com/photo/2018/04/14/20/38/cherry-blossom-3320018__340.jpg
307 | http://www.hawaiinewsnow.com/resizer/zjkw8DpURniom6b9EB_oMKxDBlU=/1200x600/arc-anglerfish-arc2-prod-raycom.s3.amazonaws.com/public/PQ2M2IVDTFHM3A7XCMPTYRHYDM.JPG
308 | https://i.pinimg.com/originals/ff/a4/00/ffa400b8bc7f15264c9e7439824017de.jpg
309 | http://mahoneysgarden.com/wp-content/uploads/2018/04/cherry.jpg
310 | http://www.kawazu-onsen.com/eng/img/sakura/sakura.jpg
311 | https://www.thetreecenter.com/wp-content/uploads/yoshino-cherry-1.jpg
312 | https://c-lj.gnst.jp/public/article/detail/a/00/01/a0001031/img/en/a0001031_parts_589d4131c1444.jpg?20181205112727
313 | https://image.shutterstock.com/image-photo/spring-cherry-blossoms-pink-flowers-260nw-251769337.jpg
314 | https://www.kew.org/sites/default/files/styles/wysiwyg_medium/public/cherry%20blossom%20and%20palm%20house%201.jpg?itok=d9u9aS4G
315 | https://media.istockphoto.com/photos/pink-cherry-blossom-flowers-white-background-picture-id503662590?k=6&m=503662590&s=612x612&w=0&h=6v9feJPXb853M8-8XpvXXY-WJU99fdC55VDuXeSm9-c=
316 | https://i.ytimg.com/vi/RQL-gxG9HUg/maxresdefault.jpg
317 | http://www.highparktoronto.com/images/parks/sakura/2014_Sakura_cherry_blossomss.jpg
318 | https://arbordayblog.org/wp-content/uploads/2017/03/flowering-tree-iStock-646742084-1080x608.jpg
319 | https://cdn1.i-scmp.com/sites/default/files/images/methode/2018/04/12/4ed054a8-3d62-11e8-b6d9-57447a4b43e5_image_hires_115729.JPG
320 | https://www.funinfairfaxva.com/wp-content/uploads/2014/04/Cherry-blossom-close-up-Alexander-Bell-Dr-Reston-Virginia.jpg
321 | https://cdn.webvanta.com/000000/51/74/square_200/uploads/plant/1478715294-335c57b7fdc4fdfde/Prunus%20Kiku-Shidare-Zakura.jpg
322 | https://www.ornamental-trees.co.uk/images/prunus-pink-perfection-tree-p26-1657_medium.jpg
323 | https://www.fiftyflowers.com/site_files/FiftyFlowers/Image/Testimonials/japanese-themed-business-function-aa89d2c.jpg
324 | http://cdn-image.travelandleisure.com/sites/default/files/1457128345/Cherry-Blossoms-Washington-DC-001-BLOOMS0316.jpg
325 | https://www.tourismvictoria.com/sites/default/files/flowersbottle.png
326 | https://www.rhs.org.uk/getmedia/b2cd3ffa-6cc7-4489-b918-1f572f6bfe26/Prunus-Shogetsu)_RHS_WSYD0010920.jpg?width=800&height=533
327 | https://www.centralpark.com/downloads/1213/download/central-park-cherry-blossoms.jpe?cb=783665e2e86dabe11fdbe675f24e26c4&w=640
328 | https://image.shutterstock.com/image-photo/cherry-blossom-pink-flowers-small-260nw-1013681428.jpg
329 | https://www.woodlandtrust.org.uk/media/100051137/Bir-Cherry-Blossom-2.jpg?cb=-390556190&preset=gallery-tab-main-image
330 | https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Cerisier_du_Japon_Prunus_serrulata.jpg/1200px-Cerisier_du_Japon_Prunus_serrulata.jpg
331 | https://utahstatecapitol.utah.gov/wp-content/uploads/DSC_1438.jpg
332 | https://www.vcbf.ca/wp-content/uploads/2013/03/yoshinohandfrommikebymy.jpg
333 | https://www.thehindu.com/news/national/other-states/article20212628.ece/alternates/FREE_660/CHERRYBLOSSOM
334 | https://www.buzzle.com/images/flowers/varieties/cherry-blossom-flower.jpg
335 | https://hips.hearstapps.com/bpc.h-cdn.co/assets/17/10/1489078842-lake-balboa-cherry-blossoms.jpg
336 | http://www.origami-instructions.com/images/easy-cherry-blossom/thumbnails/22-easy-cherry-blossom.jpg
337 | https://requestreduce.org/images/cherry-blossom-flower-clipart-4.png
338 | https://p7011128.vo.llnwd.net/e1/wp-content/uploads/plants/originals/11576.jpg
339 | https://thumbs-prod.si-cdn.com/x-hWp1K41nXD_iY3waPBBLeY-Tw=/800x600/filters:no_upscale()/https://public-media.si-cdn.com/filer/54/ef/54ef8b98-4334-47a3-a9ac-a9d84d8ecd73/istock-626837432.jpg
340 | https://twistedsifter.files.wordpress.com/2017/05/cherry-blossom-tunnels-bonn-germany.jpg
341 | https://images.japan-experience.com/guide-japon/18185/s380x280/.jpg
342 | https://images-na.ssl-images-amazon.com/images/I/61NyWM%2BF56L._SL1000_.jpg
343 | https://img-aws.ehowcdn.com/350x235p/photos.demandstudios.com/getty/article/52/62/dv2024005_XS.jpg
344 | https://i2.wp.com/www.kyuhoshi.com/wp-content/uploads/2016/02/himeji_castle_cherry_blossom.jpg?zoom=2.625&fit=1024%2C683&ssl=1&resize=164%2C94
345 | https://png.pngtree.com/element_origin_min_pic/16/11/13/ed172befdab7649f036dca9d1c690b55.jpg
346 | https://assets.simpleviewinc.com/simpleview/image/upload/c_limit,q_65,w_845/v1/clients/vancouverbc/guide-to-vancouvers-cherry-blossoms_ddfefa0f-db54-459b-a7b2-498f81b1ef37.jpg
347 | https://10mag.com/wp-content/uploads/2017/04/2Z0A8075.jpg
348 | https://cdn.shopify.com/s/files/1/0557/0657/products/Prunus-Shirotae_large.jpg?v=1488077063
349 | https://www.seejapan.co.uk/images/default-source/default-album/kakunodate_7.jpg?sfvrsn=0&MaxWidth=1000&MaxHeight=600&ScaleUp=false&Quality=High&Method=ResizeFitToAreaArguments&Signature=DB65B40C67844FCC44FC64F7A0A0FD8640C8E37F
350 | https://static.tripzilla.com/thumb/e/f/103151_800x.jpg
351 | https://festival.si.edu/Media/Default/blog/erina.jpg
352 | https://i.cbc.ca/1.4648380.1525446183!/fileImage/httpImage/image.jpeg_gen/derivatives/16x9_780/cherry-blossoms-high-park.jpeg
353 | https://www.wyevalegardencentres.co.uk/ccstore/v1/images/?source=/file/v8295832420715023018/products/p0850032206.02.jpg&height=300&width=300
354 | https://www.pixelstalk.net/wp-content/uploads/2016/05/Beautiful-cherry-blossom-wallpapers.jpg
355 | https://www.cntravellerme.com/sites/default/files/styles/full_img/public/images/2018/03/25/Nami-Korea.jpg?itok=SBMqPMCO
356 | https://t4.ftcdn.net/jpg/00/99/75/39/240_F_99753980_yeI63Cvr97BaCYXBHyEJmunbA04wvoAj.jpg
357 | https://www.japan-guide.com/g18/2011_petals.jpg
358 | https://www.washingtonian.com/wp-content/uploads/2018/03/Cherry-Blossom-PUB-interiors-5-2048x1365.jpg
359 | https://thumbs.dreamstime.com/t/real-pink-sakura-flowers-cherry-blossom-close-up-real-pink-sakura-flowers-cherry-blossom-close-up-naka-meguro-tokyo-105855455.jpg
360 | https://media.cntraveler.com/photos/58bef2422fd54d2dfe080f02/master/w_420,c_limit/fairmount-park-philadelphia-cherry-blossoms-Alamy-F3EBJ8.jpg
361 | https://wallpaperaccess.com/full/33911.jpg
362 | https://gardenerspath.com/wp-content/uploads/2015/01/Kwanzan-cherry-blossoms.jpg
363 | https://img.washingtonpost.com/rf/image_480w/2010-2019/WashingtonPost/2017/03/14/National-Enterprise/Images/653298074.jpg?uuid=xi6aOgjlEeeT3AD5vddO0Q
364 | https://img.freepik.com/free-photo/pink-sakura-flower-against-blue-sky_41389-400.jpg?size=626&ext=jpg
365 | https://www.nationalgeographic.com/content/dam/travel/2019-digital/your-shot-cherry-blossoms/009-your-shot-cherry-blossoms.jpg
366 | https://press.ikidane-nippon.com/wordpress/wp-content/uploads/2018/03/4-8.jpg
367 | https://flowertattooideas.com/wp-content/uploads/2016/06/11-cherry-blossom-on-the-half-sleeve-and-shoulder.jpg
368 | https://cherryblossomwatch.com/wp-content/uploads/2017/03/cherry-blossoms-washington-dc-march-03-2017-13.jpg
369 | https://shop.arborday.org/data/default/images/catalog/600/Turnkey/1/Japanese-Flowering-Cherry_1-812.jpg
370 | https://bf1-farm6.staticflickr.com/5014/5552956957_6a06d32a8e_b.jpg
371 | https://www.ctvnews.ca/polopoly_fs/1.4271871.1548687287!/httpImage/image.jpg_gen/derivatives/landscape_960/image.jpg
372 | http://www.kawazu-onsen.com/eng/img/sakura/main_sakura.jpg
373 | https://images.pexels.com/photos/931181/pexels-photo-931181.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500
374 | https://www.tripsavvy.com/thmb/CmUrnI8ZOu0EEZTXYG6sam_UOlM=/960x0/filters:no_upscale():max_bytes(150000):strip_icc()/japan-cherry-blosson-fest-59dfa0f522fa3a0010261f25.jpg
375 | https://media.angieslist.com/s3fs-public/styles/widescreen_large/s3/s3fs-public/B97103D9-1DD8-B71C-078BA753DDE1824A.jpg?itok=0RUaq0ur
376 | https://www.ornamental-trees.co.uk/images/prunus-cerasifera-princess-tree-p810-5135_thumb.jpg
377 | https://cdn.pixabay.com/photo/2019/03/03/09/07/flowers-4031397__340.jpg
378 | https://cdn.cnn.com/cnnnext/dam/assets/140316105449-irpt-cherry-blossom-12-horizontal-large-gallery.jpg
379 | https://www.gardendesign.com/pictures/images/900x705Max/site_3/prunus-serrulata-mt-fuji-shirotae-cherry-tree-alamy-stock-photo_12581.jpg
380 | https://www.japanspecialist.co.uk/wp-content/uploads/2015/02/hyogo-himeji-castle-JNTO.jpg
381 | https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=1398612800264609
382 | https://www.toronto.ca/wp-content/uploads/2018/04/95f0-high-park-cherry-blossoms-banner.jpg
383 | https://www.gardenexpress.com.au/wp-content/uploads/2016/06/Prunus-serrulata-Shimidsu-Sakata.jpg
384 | https://mymodernmet.com/wp/wp-content/uploads/2018/04/cherry-blossom-meaning-3.jpg
385 | https://www.pixelstalk.net/wp-content/uploads/2016/05/Flowers-white-cherry-blossom-wallpapers.jpg
386 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2017/01/kawazu-sakura-770x481.jpg
387 | https://fairviewgardencenter.com/wp-content/uploads/2017/02/cherry-blossom.jpg
388 | https://assets.simpleviewinc.com/simpleview/image/fetch/c_fill,h_350,q_75,w_350/http://res.cloudinary.com/simpleview/image/upload/v1470670678/clients/newark/ebea327a_af0e_461f_97b2_2a1ad1271af8_b375cc30-0634-481d-b76e-936be78fd4a4.jpg
389 | https://c.pxhere.com/photos/91/a4/cherry_blossom_nature_tree_blossom_bloom_spring_blossom_ornamental_cherry-1387765.jpg!d
390 | https://image.shutterstock.com/image-vector/realistic-cherry-blossom-flowers-sakura-260nw-1017836332.jpg
391 | https://images.unsplash.com/photo-1507023884736-cda0889ad894?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80
392 | https://www.vcbf.ca/wp-content/uploads/2013/03/plumblossomimg_3390byjt.jpg
393 | https://cdn.shopify.com/s/files/1/0059/8835/2052/products/Kwanzan_Cherry_Tree_350_THUMB_556f14ff-9da5-49c1-9f2d-ebb9098923e5_large.jpg?v=1549660082
394 | http://easykart.info/wp-content/uploads/2019/01/cherry-blossom-silk-flowers-homes-realistic-silk-flowers-cherry-blossom-branch-white-cherry-blossom-artificial-flower-stem-white-cherry-blossom-artificial-flowers.jpg
395 | https://www.funinfairfaxva.com/wp-content/uploads/2015/04/Meadowlark-Connector-cherry-blossoms-Vienna-Virginia.jpg
396 | http://www.pngmart.com/files/7/Japanese-Flowering-Cherry-PNG-File.png
397 | https://o.aolcdn.com/images/dims3/GLOB/legacy_thumbnail/1200x630/format/jpg/quality/85/http%3A%2F%2Fi.huffpost.com%2Fgen%2F5248134%2Fimages%2Fn-OSAKA-CHERRY-BLOSSOMS-628x314.jpg
398 | https://image.shutterstock.com/z/stock-photo-beautiful-flowers-cherry-blossom-on-softly-blurred-background-1038964567.jpg
399 | https://www.kinseyfamilyfarm.com/wp-content/uploads/nursery/yoshino-cherry-tree.jpg
400 | http://media.interaksyon.com/wp-content/uploads/2018/04/cherry-blossoms-up-close.jpg
--------------------------------------------------------------------------------
/mini-lessons/data/ume.csv:
--------------------------------------------------------------------------------
1 | https://t3.ftcdn.net/jpg/01/95/43/70/500_F_195437055_HxQjL6JoNVcBFFi1NvXJmYxAGd9f1CH8.jpg
2 | https://i.ytimg.com/vi/bTaa9-dzU3w/maxresdefault.jpg
3 | https://media.gettyimages.com/photos/ume-blossom-picture-id983430110
4 | https://www.jrailpass.com/blog/wp-content/uploads/2016/12/plum-blossoms-e1481818339192.jpg
5 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2015/01/3221923505_69af87bbb5_b.jpg
6 | https://gaijinpot.scdn3.secure.raxcdn.com/app/uploads/sites/4/2017/02/Ume-blossom-elead-1024x683.jpg
7 | https://www.japan-guide.com/g18/2013_01.jpg
8 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2018/02/plum-blossoms-kameido-tenjin.jpg
9 | https://www.jrailpass.com/blog/wp-content/uploads/2016/12/plum-blossom-mito-kairakuen.jpg
10 | https://resources.matcha-jp.com/resize/720x2000/2017/02/09-18363.jpeg
11 | https://gaijinpot.scdn3.secure.raxcdn.com/app/uploads/sites/4/2014/03/plum-blossom.jpg
12 | http://www.2aussietravellers.com/wp-content/uploads/2015/03/ume-1.jpg
13 | https://i.ytimg.com/vi/EV-sKk9XcXs/maxresdefault.jpg
14 | http://gethiroshima.com/wp-content/gallery/ume-plum-blossoms-at-shukkei-en-garden/ume-at-shukkeien-garden-03.jpg
15 | https://c-lj.gnst.jp/public/article/detail/a/00/00/a0000996/img/en/a0000996_parts_589d464ed59ee.jpg?20190105125801
16 | http://www.2aussietravellers.com/wp-content/uploads/2015/03/sakura-1.jpg
17 | https://savvytokyo.scdn3.secure.raxcdn.com/app/uploads/2018/02/IMG_20180203_140812-1024x768.jpg
18 | http://www.punipunijapan.com/wp-content/uploads/2016/03/5e32cae8487d660228c2d7846f9c2b4d_m-400x264.jpg
19 | https://onlynativejapan.com/wp-content/uploads/sites/10/2013/03/Ume.jpg
20 | https://c-lj.gnst.jp/public/article/detail/a/00/00/a0000996/img/en/a0000996_parts_5a7ceaba86f57.jpg?20190105125801
21 | http://www.punipunijapan.com/wp-content/uploads/2016/03/150303-085448-zP3031854_R-400x300.jpg
22 | https://favy-inbound-singapore.s3.amazonaws.com/uploads/topic_item/image/29335/retina_pixta_29449376_S.jpg
23 | http://www.2aussietravellers.com/wp-content/uploads/2015/03/ume-4.jpg
24 | http://onlynativejapan.com/wp-content/uploads/sites/10/2013/01/a0960_004235.jpg
25 | https://cdn.shopify.com/s/files/1/0686/1247/files/Amayori_Plum_Blossom.jpg?12658241891304170634
26 | http://www.akarijapanart.com/wp-content/uploads/2015/03/%E3%81%84%E3%81%AA%E3%81%B9%E6%A2%85%E3%81%BE%E3%81%A4%E3%82%8A-300x211.jpg
27 | http://kyotofoodie.com/wp-content/uploads/2009/02/ume-blossom-and-furosen-sake-8.jpg
28 | https://find-your-jpn.com/wp-content/uploads/2017/05/ume-blossoms-in-the-shrine-1024x768.jpg
29 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800070/61270671-ume-flower-japanese-plum-blossom.jpg
30 | https://c1.staticflickr.com/5/4779/40758165972_6010ff7581_b.jpg
31 | https://savvytokyo.scdn3.secure.raxcdn.com/app/uploads/2018/02/iStock-465257169-1024x724.jpg
32 | http://regex.info/i/2006_03_24_Ume_blossom_Zuishinin_Temple_DSC_0006.jpg
33 | https://i.pinimg.com/originals/27/b4/ef/27b4ef55f0503e88a1640ff6df76e3e3.jpg
34 | https://render.fineartamerica.com/images/rendered/default/wood-print/10.000/6.625/break/images/artworkimages/medium/2/ume-blossom-masato-morita.jpg
35 | https://c-lj.gnst.jp/public/article/detail/a/00/00/a0000996/img/en/a0000996_parts_589d463befc27.jpg?20190105125801
36 | https://previews.123rf.com/images/khunta/khunta1802/khunta180200187/96758091-tokyo-japan-february-27-2018-ume-blossom-or-plum-blossom-harbinger-of-the-arrival-of-spring-in-japan.jpg
37 | https://i.ytimg.com/vi/Xj0QoFyOqs0/maxresdefault.jpg
38 | http://static1.squarespace.com/static/5911d3eedb29d6de5d2bc1c7/5bea590aaa4a99929f72e7f4/5c2edf0e032be47ea490995c/1546575633930/Ume+Blossom+Tea+BowlIMG_1945.JPG
39 | http://jpninfo.com/wp-content/uploads/2019/02/Fotolia_197891299_Subscription_Monthly_M-e1549265640426.jpg
40 | https://wafuku.files.wordpress.com/2014/03/img_0574.jpg?w=620&h=389
41 | http://lh6.ggpht.com/_qKoqT31APNY/TX0lIZ5LBZI/AAAAAAAAA8I/tO2XCL6KK9w/ume%20blossom1_thumb%5B4%5D.jpg?imgmax=800
42 | http://www.deepkyoto.com/wp-content/uploads/2011/02/pink.jpg
43 | https://foodmuseum.typepad.com/.a/6a00d8341c696953ef0147e33726fb970b-600wi
44 | https://i2.wp.com/www.kyuhoshi.com/wp-content/uploads/2015/01/ume_blossoms_picture_japan.jpg?fit=800%2C534&ssl=1
45 | https://cdn.cnn.com/cnnnext/dam/assets/170320160829-odawara-ume-matsuri.jpg
46 | https://cdn02.pinkoi.com/product/11YWeFu_/0/1/800x0.jpg
47 | https://ak0.picdn.net/shutterstock/videos/1981210/thumb/1.jpg
48 | http://www.2aussietravellers.com/wp-content/uploads/2015/03/Ume-and-Sakura-1.jpg
49 | https://i0.wp.com/www.kyuhoshi.com/wp-content/uploads/2015/01/plum_blossom_osaka_japan.jpg?fit=800%2C535&ssl=1
50 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800076/61270542-ume-flower-japanese-plum-blossom.jpg
51 | https://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Prunus_mume.JPG/1200px-Prunus_mume.JPG
52 | https://resources.matcha-jp.com/archive_files/jp/2016/03/20160302ume2-700x468.jpg
53 | https://previews.123rf.com/images/khunta/khunta1802/khunta180200193/96856527-ume-blossom-or-plum-blossom-harbinger-of-the-arrival-of-spring-in-japan.jpg
54 | https://thumbs.dreamstime.com/z/ume-blossom-plum-harbinger-arrival-spring-japan-tokyo-february-110975080.jpg
55 | https://kimonohouse.com.au/wp-content/uploads/2018/10/Ume-Blossom-1.jpg
56 | https://www.jrailpass.com/blog/wp-content/uploads/2016/12/plum-blossom-tree.jpg
57 | https://images.rove.me/w_1920,q_85/fax91jlcorqmhleknahr/japan-ume-blossom.jpg
58 | https://i2.wp.com/japaninfoswap.com/wp-content/uploads/2015/02/4336434765_ca75412dac_z.jpg?resize=640%2C425
59 | https://media-cdn.tripadvisor.com/media/photo-s/12/3b/da/ee/img-20180225-204830-530.jpg
60 | https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Prunus_mume_Peggy_Clarke_%2870052%29.jpg/248px-Prunus_mume_Peggy_Clarke_%2870052%29.jpg
61 | https://japan-magazine.jnto.go.jp/jnto2wm/wp-content/uploads/1701_plum_main.jpg
62 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2013/02/ume-blossom-300x199.jpg
63 | https://images.rove.me/w_1920,q_85/mrpmkxvx3zntbcxybwuh/japan-ume-blossom.jpg
64 | https://i.pinimg.com/originals/04/ff/0d/04ff0d1e65cebf3c86e7e2de2878e8b2.jpg
65 | https://render.fineartamerica.com/images/rendered/search/framed-print/images/artworkimages/medium/2/ume-blossom-masato-morita.jpg
66 | https://st3.depositphotos.com/7610136/18574/v/600/depositphotos_185745948-stock-video-tokyo-japan-february-2018-ume.jpg
67 | https://ctl.s6img.com/society6/img/8nFSi41tF0BIbTaPiq1wdEn-QdA/w_700/rugs/horizontal/small/alternate/~artwork,fw_4500,fh_3000,iw_4500,ih_3000/s6-0041/a/18573534_5515896/~~/ume-blossom-rugs.jpg?wait=0&attempt=0
68 | https://i.cbc.ca/1.2596206.1396474989!/fileImage/httpImage/image.jpg_gen/derivatives/16x9_780/cherry-or-plum-blossom.jpg
69 | https://image.shutterstock.com/z/stock-photo-ume-blossom-ume-tree-772454992.jpg
70 | https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/MeihuaShan_1.jpg/240px-MeihuaShan_1.jpg
71 | https://i.ytimg.com/vi/wmKR_QHocdI/maxresdefault.jpg
72 | https://2.bp.blogspot.com/--yPpm-a0vHY/VuVU1Aj5GpI/AAAAAAAAFWI/azLLIRFIG1I9pSsdGwwZaZAoDBEFMH33w/s1600/red%2Bume%2Bblossoms-Engaku-ji.jpg
73 | http://khaosan-tokyo.com/en/wp-content/uploads/2016/02/ume2.jpg
74 | https://previews.123rf.com/images/khunta/khunta1803/khunta180300025/97604502-tokyo-japan-march-10-2018-pink-ume-blossom-or-plum-blossom-harbinger-of-the-arrival-of-spring-in-jap.jpg
75 | http://www.2aussietravellers.com/wp-content/uploads/2015/08/ume-1.jpg
76 | https://images-na.ssl-images-amazon.com/images/I/81z3bYMkNfL._SL1500_.jpg
77 | https://kobefinder.com/wp-content/uploads/2017/01/okamotoplum06.jpg
78 | https://i2.wp.com/www.kyuhoshi.com/wp-content/uploads/2015/01/ume_blossoms_picture_japan.jpg?zoom=2.625&resize=387%2C124&ssl=1
79 | https://media.gettyimages.com/photos/ume-blossom-picture-id139966921
80 | https://media-cdn.tripadvisor.com/media/photo-s/12/11/52/4e/caption.jpg
81 | https://i2.wp.com/1.bp.blogspot.com/-NcTFkKI5-B8/VteCpjL1DhI/AAAAAAAAEd4/r_5EZQdijDc/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B7.jpg?ssl=1
82 | https://media.timeout.com/images/103110846/image.jpg
83 | https://image.shutterstock.com/display_pic_with_logo/171744298/772454992/stock-photo-ume-blossom-ume-tree-772454992.jpg
84 | https://cdn.cheapoguides.com/wp-content/uploads/sites/2/2018/02/winter-1157074-1200x320.jpg
85 | https://media.istockphoto.com/photos/peach-tree-in-japan-japanese-apricot-flower-an-ume-flower-ume-peach-picture-id977263542
86 | http://www.akarijapanart.com/wp-content/uploads/2015/03/plum-flower.jpg
87 | https://comps.canstockphoto.com/ume-flower-in-japan-temple-stock-photo_csp26230923.jpg
88 | https://images.rove.me/w_1920,q_85/crgwurxgzyic93adfffh/japan-ume-blossom.jpg
89 | https://image.shutterstock.com/image-photo/beautiful-pink-plum-blossom-ume-450w-522075184.jpg
90 | https://thumbs.dreamstime.com/z/tokyo-japan-february-ume-blossom-plum-harbinger-arrival-spring-110975198.jpg
91 | https://i0.wp.com/4.bp.blogspot.com/-0scBxfpBcdw/VteCHJFZwII/AAAAAAAAEdk/fyxX9cHWm5s/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B5.jpg?ssl=1
92 | https://girljininjapan.files.wordpress.com/2018/03/org_dsc03099.jpg?w=1000
93 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800072/61270537-ume-flower-japanese-plum-blossom.jpg
94 | https://media.timeout.com/images/103688540/image.jpg
95 | https://taiken.co/uploads/2016/02/DSCF7890-medium.jpg
96 | https://i.pinimg.com/originals/93/ae/02/93ae02752a3d56a71265c46a998bda64.jpg
97 | https://img00.deviantart.net/d42a/i/2015/125/1/c/ume_blossom_by_enchanted_x-d1ggdg4.jpg
98 | https://t2.ftcdn.net/jpg/02/22/99/39/400_F_222993950_20BfIJzNcvEbaTwCZjrEVrm9obVACJp4.jpg
99 | https://i.ebayimg.com/images/i/321962803596-0-1/s-l1000.jpg
100 | https://image.shutterstock.com/display_pic_with_logo/4261630/602292740/stock-photo-ume-blossom-602292740.jpg
101 | https://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Ume_blossom_2005.03.14.jpg/250px-Ume_blossom_2005.03.14.jpg
102 | http://worldartsme.com/images/ume-blossom-flower-clipart-1.jpg
103 | https://cdn.shopify.com/s/files/1/0890/8402/products/ume-blossom-intarsia-flower-detail_1024x1024.jpg?v=1436206631
104 | https://st3.depositphotos.com/7610136/18574/v/600/depositphotos_185743812-stock-video-tokyo-japan-february-2018-ume.jpg
105 | http://cdn.deepjapan.org/content/images/.user/_image1_1_y2LKGA1424788969765.jpg
106 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800066/61335213-ume-flower-japanese-plum-blossom.jpg
107 | http://regex.info/i/2006_03_24_Ume_blossom_Zuishinin_Temple_DSC_0010.jpg
108 | https://cdn.cheapoguides.com/wp-content/uploads/sites/3/2017/01/plum_blossom.jpg
109 | https://image.shutterstock.com/display_pic_with_logo/4261630/602292740/stock-photo-ume-blossom-602292740.jpg
110 | https://thumbs.dreamstime.com/z/peach-tree-japan-japanese-apricot-flower-ume-blossom-close-up-pink-flowers-119058953.jpg
111 | https://www.nippon.com/en/ncommon/contents/guide-to-japan/119614/119614.jpg
112 | https://en.pimg.jp/038/399/234/1/38399234.jpg
113 | https://img.fotocommunity.com/japanese-apricot-ume-blossom-4-fc179b0d-941f-42f3-8001-dd22849d8f31.jpg?width=1000
114 | http://khaosan-tokyo.com/en/wp-content/uploads/2016/02/ume1.jpg
115 | https://lh3.googleusercontent.com/fWWOKojo9QcoX81KkEAn82TPOej6SGoLoCNgk3My_7-A6mIOfiUiFcsTQ2HVmgA93PDIOTcPnKG-jFGpio1yLyTw9QLKx5ErxKU80m_V3-ehGxC6exUr_hVFihlZrozTGargnA3lXBqZbQImKd0GVpcWsUxKQ39lFPlry78ueK1Vk-Sd_eHDFHyo7Nx9epYqmTVcvbjvLtdG5wD9BcXeUuUdDo57dYxcYGBkpmPY0PNdQb3nF67qT2t9smXbXh8wtOufZnAHGndYqvrP1d56AJ5DEL_Fzjca9aENYVkKaVcAWfCONTcuO70OcfyQpRZEabde25lE25J285JBYww6ULPOAlxOcFFi_SBWlLRuZkyVyMVfzXztTUl3Py_KX6GY_uNc9Xnwp28NiNnJeLa-exs7-CY_RD5kkhtcMDVZmJfH7lqA3LSg3DzerUj2Y0DHb0LrhGujkXYPml7isZI9BhLz-yPTwQdPS0XAqYr0BaYdOarwnzr2Qw58S2nf_cv4rFI0oYeRCxhwySETkNoyxbLCyA2g0y08L3N2DZ_QdWfMoQTm7d1F_SPiqAuh_1NbXrVA0J9jyxAXtgJ73WYDgvDAhX1rUqUUbRUfMG4=w993-h662-no
116 | https://t4.ftcdn.net/jpg/01/84/23/65/500_F_184236502_OQHDPdBPktBtF1xoX2esNRN2KHPZFNUU.jpg
117 | https://c1.staticflickr.com/5/4772/26727781478_8c4861633d_b.jpg
118 | https://c8.alamy.com/comp/RA5PJP/ume-flower-in-kyoto-japan-japan-is-a-country-located-in-the-east-asia-RA5PJP.jpg
119 | https://find-your-jpn.com/wp-content/uploads/2017/05/ume-blossoms-and-Uguisu-Bridge-1024x768.jpg
120 | https://i.cbc.ca/1.2596206.1396474989!/fileImage/httpImage/image.jpg_gen/derivatives/16x9_780/cherry-or-plum-blossom.jpg
121 | https://i.etsystatic.com/9524497/r/il/d64a3d/1690134657/il_fullxfull.1690134657_mw8e.jpg
122 | https://comps.canstockphoto.com/ume-flower-in-japan-temple-picture_csp26230912.jpg
123 | https://media.istockphoto.com/photos/japanese-plum-blossom-picture-id529325413
124 | https://i0.wp.com/tokyo-direct-guide.com/blog/wp-content/uploads/2015/03/plumumeblossomsinjapan.jpg?resize=400%2C300
125 | https://image.shutterstock.com/image-photo/ume-blossom-tree-450w-772454971.jpg
126 | https://dumielauxepices.net/sites/default/files/ume-blossom-clipart-purple-dahlia-809119-8220413.jpg
127 | https://cdn-thumbs.barewalls.com/ume-japanese-plum-blossom_bwc18647271.jpg
128 | http://www.akarijapanart.com/wp-content/uploads/2015/03/plum-flower-848x400.jpg
129 | http://i.imgur.com/bAz1g4u.jpg
130 | https://i1.wp.com/www.kyuhoshi.com/wp-content/uploads/2015/12/plum_blossom_shizuoka_japan.jpg?fit=800%2C534&ssl=1
131 | https://taiken.co/uploads/2016/02/DSCF7872-medium.jpg
132 | https://memegene.net/sites/default/files/wallpaper/ume-blossom-clipart/100203/ume-blossom-clipart-chinese-flower-100203-2284574.jpg
133 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800067/61270667-ume-flower-japanese-plum-blossom.jpg
134 | https://cdn1.foap.com/images/89946536-f3a5-4e7d-ab39-8f87c9de3748/w640.jpg?1487477217
135 | https://st3.depositphotos.com/7610136/18574/v/600/depositphotos_185745150-stock-video-tokyo-japan-february-2018-ume.jpg
136 | https://media-cdn.tripadvisor.com/media/photo-s/12/27/fe/45/photo0jpg.jpg
137 | https://a3.cdn.japantravel.com/photo/3802-23655/1000/tokyo-ume-blossoms-at-hamarikyu-graden0-23655.jpg
138 | https://thumbs.dreamstime.com/z/ume-blossom-12836542.jpg
139 | https://image.shutterstock.com/display_pic_with_logo/4261630/602292797/stock-photo-ume-blossom-602292797.jpg
140 | http://www.jsjapan.com/blog/wp-content/uploads/2015/03/DSC01223.jpg
141 | https://www.crystalgraphicsimages.com/template/ceadeczba_largest.jpg
142 | https://img.fotocommunity.com/japanese-apricot-ume-blossom-9-6f057585-5cdd-457c-9d7a-cbc6e3dec4dc.jpg?height=1000
143 | https://i.pinimg.com/originals/ed/27/47/ed2747b45405f38592588216f44a79bf.jpg
144 | https://c8.alamy.com/comp/RA5PHE/ume-flower-in-kyoto-japan-japan-is-a-country-located-in-the-east-asia-RA5PHE.jpg
145 | http://kyotofoodie.com/wp-content/uploads/2009/02/ume-blossom-and-furosen-sake-7.jpg
146 | https://static2.bigstockphoto.com/0/4/2/large1500/240342904.jpg
147 | https://c1.staticflickr.com/5/4622/39888468994_c2794686b3_b.jpg
148 | http://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Peach_flowers.jpg/717px-Peach_flowers.jpg
149 | https://images.rove.me/w_1920,q_85/t0gsk3kvhsabyd7mizds/japan-ume-blossom.jpg
150 | http://www.city.kobe.lg.jp/ward/kuyakusho/higashinada/foreign/overview/img/ov_um_p01.jpg
151 | https://en.pimg.jp/038/684/791/1/38684791.jpg
152 | http://www.city.yokohama.lg.jp/kohoku/sinkou/kanbaikai/image/2018kanbaikai.jpg
153 | https://comps.canstockphoto.com/ume-flower-in-japan-temple-stock-photo_csp26230923.jpg
154 | http://www.wallcoo.net/flower/Chinese_Plum_Blossom/images/%5Bwallcoo_com%5D_Chinese_plum_blossom_08FLW053.jpg
155 | https://media.istockphoto.com/photos/ume-blossom-picture-id453176951
156 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800074/61270540-ume-flower-japanese-plum-blossom.jpg
157 | https://dumielauxepices.net/sites/default/files/ume-blossom-clipart-hot-pink-flower-809122-3643081.jpg
158 | https://www.clipartmax.com/png/small/62-624508_%5Btokyo%5D-ume-blossom-2018-plum-tree-plum-blossom.png
159 | https://media-cdn.tripadvisor.com/media/photo-s/0a/8a/0d/a1/photo1jpg.jpg
160 | http://www.jp-rail-sg.com/wp-content/uploads/sites/3/2016/01/DSCF0089.jpg
161 | https://as2.ftcdn.net/jpg/01/92/93/49/500_F_192934925_5NJdWE4gnP366P5NvG1Fedb2jhE2aISW.jpg
162 | https://cdn3.foap.com/images/0b0518ae26154688a1d778cbd5553dfa/web_preview.jpg?1423671140
163 | https://res.cloudinary.com/fleetnation/image/private/c_fit,w_1120/g_south,l_text:style_gothic2:%C2%A9%20Yang%20daehyeon,o_20,y_10/g_center,l_watermark4,o_25,y_50/v1403173258/icqbiwv2rsrmcwofewhc.jpg
164 | https://image.shutterstock.com/image-photo/ume-blossom-tree-450w-772454977.jpg
165 | https://i.redd.it/s4mrwpt153a01.jpg
166 | https://ctl.s6img.com/society6/img/kXGyqjo6HdRcisTfWoI4xNEVREE/h_264,w_264/rugs/horizontal/medium/~artwork,fw_4500,fh_3000,fy_-750,iw_4500,ih_4500/s6-original-art-uploads/society6/uploads/misc/b4500cc133ec4d8c98188b2d5d660b47/~~/sakura-blossom-burgundy-rugs.jpg
167 | https://memegene.net/sites/default/files/styles/225x120/public/wallpaper/ume-blossom-clipart/100192/ume-blossom-clipart-purple-chrysanthemum-100192-7880102.jpg?itok=BMxZoa5X
168 | http://gethiroshima.com/wp-content/gallery/Ume-plum-blossoms-at-Shukkei-en-Garden-2017/dynamic/Ume-blossoms-at-Shukkei-en-Garden-2017-30.jpg-nggid043645-ngg0dyn-800x0x100-00f0w010c010r110f110r010t010.jpg
169 | https://thumbs.dreamstime.com/z/plum-blossom-ume-which-blooms-early-spring-66611891.jpg
170 | https://publicdomainphotography.com/samples/NDM1NDMzZWZlOWNmZWYw/NDUxM2VmZTljZmVmMA==/Ume-Blossom-,-Iwamoto-Mountain-Park-shades-of-pink.jpg
171 | https://i1.wp.com/tokyo-direct-guide.com/blog/wp-content/uploads/2014/03/632b561a9dbb770e97f452139289b9c0.jpg
172 | https://tshop.r10s.jp/marimari-kyoto/cabinet/03745087/img60601637.jpg?fitin=330:330
173 | https://previews.agefotostock.com/previewimage/medibigoff/86fef2f32d9fd62e7fc54c52b8dd97ae/oth-st-ggg5235-1602.jpg
174 | https://www.meanwhile-in-japan.com/wp-content/uploads/2010/03/plum1-300x225.jpg
175 | https://media.gettyimages.com/photos/japanese-ume-flower-picture-id628994660
176 | https://t4.ftcdn.net/jpg/02/28/65/31/240_F_228653185_X3TfFtPKyqqEy7t54gCW68xKjlAr25wQ.jpg
177 | https://ssl.c.photoshelter.com/img-get/I000022xT2Hu3460/s/860/860/pink-kobai-plum-blossom.jpg
178 | https://c1.staticflickr.com/5/4673/25681696967_b795a46cf9_b.jpg
179 | https://st3.depositphotos.com/7610136/18574/v/600/depositphotos_185745642-stock-video-tokyo-japan-february-2018-ume.jpg
180 | https://media.istockphoto.com/photos/ume-blossom-picture-id597955598
181 | http://www.jp-rail-sg.com/wp-content/uploads/sites/3/2016/01/1060716.jpg
182 | https://dumielauxepices.net/sites/default/files/drawn-ume-blossom-cherry-blossom-583771-6672026.jpg
183 | https://i.etsystatic.com/5129721/r/il/62d0da/622660859/il_570xN.622660859_f0u3.jpg
184 | https://www.japanbullet.com/images/2015/03/uguisumar6.jpg
185 | https://shop.r10s.jp/marimari-kyoto/cabinet/03745087/img60601649.jpg
186 | https://static2.bigstockphoto.com/0/4/2/large1500/240342907.jpg
187 | https://image.shutterstock.com/image-photo/ume-blossom-450w-602294609.jpg
188 | https://memegene.net/sites/default/files/wallpaper/drawn-ume-blossom/325410/drawn-ume-blossom-tree-325410-5092417.jpg
189 | https://alljapantours.com/acp/images/attraction/pA112252534.jpg
190 | https://i0.wp.com/www.cityandsee.com/wp-content/uploads/2018/03/Ume-blossoms-Atami.jpg?ssl=1
191 | https://taiken.co/uploads/2016/03/PHOTO2-medium.jpg
192 | https://c8.alamy.com/comp/RA5PHB/ume-flower-in-kyoto-japan-japan-is-a-country-located-in-the-east-asia-RA5PHB.jpg
193 | https://media-cdn.tripadvisor.com/media/photo-s/12/9b/4a/44/caption.jpg
194 | https://en.pimg.jp/038/786/778/1/38786778.jpg
195 | https://previews.123rf.com/images/tatsuo115/tatsuo1151702/tatsuo115170200017/71024800-ume-blossoms-in-kyoto-gyoen-garden-in-the-evening-kyoto-japan.jpg
196 | https://i1.wp.com/1.bp.blogspot.com/-7zHkbRqZwAA/VteCUvafOFI/AAAAAAAAEds/caMWJjQreUo/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B4.jpg?ssl=1
197 | https://t4.ftcdn.net/jpg/01/94/10/93/500_F_194109340_KQkADenEsm8Hg2REg1gxV3MaKAE3KEzV.jpg
198 | https://zoomingjapan.com/photos/hyogo/tatsuno/mitsu/sekai-no-ume-koen_06.jpg
199 | http://userdisk.webry.biglobe.ne.jp/032/869/16/N000/000/002/154755158870944370179_IMG104_6327t_1200.JPG
200 | https://i2.wp.com/yado-haruya.com/wp-content/uploads/2018/02/IMG_5038.jpg?resize=680%2C453&ssl=1
201 | https://image.shutterstock.com/display_pic_with_logo/163258492/594740009/stock-photo-plum-ume-blossom-594740009.jpg
202 | http://3.bp.blogspot.com/-VgPOPw70y8U/TuYWtIot7uI/AAAAAAAAH_k/zEPQFXmLJ7M/s1600/Imperial+Palace+Early+Sakura+3.JPG
203 | http://media.gettyimages.com/photos/japanese-dumpling-with-ume-blossoms-and-candles-picture-id469776942?s=170667a&w=1007
204 | https://media.istockphoto.com/photos/peach-tree-in-japan-japanese-apricot-flower-an-ume-flower-ume-peach-picture-id977263542
205 | https://st3.depositphotos.com/7610136/18574/v/600/depositphotos_185746156-stock-video-tokyo-japan-february-2018-ume.jpg
206 | https://c1.staticflickr.com/5/4743/39943594421_fb8d1efc8a_b.jpg
207 | https://dumielauxepices.net/sites/default/files/ume-blossom-clipart-button-809130-9806389.jpg
208 | https://photo1.ganref.jp/photo/0/b7d64dc8f781272d67378f2388c847cd/thumb5.jpg
209 | https://image.shutterstock.com/z/stock-photo-ume-blossom-ume-tree-773087467.jpg
210 | https://cdn2.foap.com/images/08740a44-ff42-4115-9275-b2913f306efc/w640.jpg?1462090936
211 | http://www.hoshinoresorts-magazine.com/wp-content/uploads/2017/03/plume-flowers.jpg
212 | https://i.pinimg.com/originals/d9/73/84/d9738411531df2cd62c619fbe1ea01b2.jpg
213 | https://image.jimcdn.com/app/cms/image/transf/dimension=1920x400:format=jpg/path/scb4c1da40a82c039/image/i95a11b6f85eb0309/version/1392540880/image.jpg
214 | https://media-cdn.tripadvisor.com/media/photo-s/0e/88/43/a6/photo0jpg.jpg
215 | https://images.assetsdelivery.com/compings_v2/suphakornbig/suphakornbig1701/suphakornbig170100024.jpg
216 | https://memegene.net/sites/default/files/wallpaper/ume-blossom-clipart/100199/ume-blossom-clipart-hot-pink-flower-100199-4198693.jpg
217 | https://en.pimg.jp/037/746/278/1/37746278.jpg
218 | https://slowtrip-saga.com/wp-content/uploads/2018/03/ume04-600x400.jpg
219 | https://i1.wp.com/thelostdino.com/wp-content/uploads/2016/03/Japanese-plum.jpg?fit=700%2C525
220 | https://cdn-thumbs.barewalls.com/ume-japanese-plum-blossom_bwc19122046.jpg
221 | https://1.bp.blogspot.com/-cM4CAdlcR2Y/VrfQ6HzTO6I/AAAAAAAAFMc/oFu74cQQuy4/s1600/IMG_3318.JPG
222 | https://previews.agefotostock.com/previewimage/medibigoff/f7606ad54aa028ac9abfba5aa3d9214c/pic-561402.jpg
223 | https://cdn-grid.fotosearch.com/CSP/CSP581/ume-japanese-plum-blossom-stock-images__k18647286.jpg
224 | https://c8.alamy.com/comp/B99TGG/close-up-of-a-white-prunus-mume-flower-B99TGG.jpg
225 | https://i0.wp.com/4.bp.blogspot.com/-RbBU0LGIsrM/VteBgwb8qeI/AAAAAAAAEdY/MaHXKSxoV3I/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B1.jpg?ssl=1
226 | https://find-your-jpn.com/wp-content/uploads/2017/05/ume-blossoms-I-saw-while-waiting-1024x768.jpg
227 | https://shop.r10s.jp/minibonsai/cabinet/00696123/01210782/img57396679.jpg
228 | https://previews.123rf.com/images/kikoa/kikoa1203/kikoa120300009/12805217-go-to-see-ume-blossoms.jpg
229 | https://i0.wp.com/achikochi.tokyo/wp-content/uploads/2017/02/P2130548-2.jpg?fit=660%2C495&ssl=1
230 | http://oeilphotography.com/wp-content/uploads/2015/02/ume-taura-004.jpg
231 | https://media.gettyimages.com/photos/ume-blossom-in-tokyo-picture-id879881880
232 | http://worldartsme.com/images/ume-flower-clipart-1.jpg
233 | https://tokyocycle.com/data/xfmg/thumbnail/0/566-28e610349ad0f1df469aa6f0bb005b6a.jpg?1529947921
234 | https://www.crafthubs.com/thumbs/diy-felt-ume-blossom.jpg
235 | https://4.bp.blogspot.com/-Fz_AeK1745E/WN0KOmPTBuI/AAAAAAAAFwE/Za9Uuvt-UX8oNPi4ZXDLnpl0i6TfEs3BwCLcB/s1600/Ume%2Bflowers_Tokeiji.jpg
236 | https://www.japanjournal.jp/lib/2019/02/Ume.jpg
237 | https://thumbs.dreamstime.com/z/japanese-plum-blossoms-white-ume-flower-japan-90550671.jpg
238 | https://gaijinpot.scdn3.secure.raxcdn.com/app/uploads/sites/4/2016/02/ume-osaka-castle.jpg
239 | http://good-hokkaido.info/wp-content/uploads/2017/06/hiraoka-park-ume19.jpg
240 | http://www.2aussietravellers.com/wp-content/uploads/2015/03/sakura-4.jpg
241 | https://dumielauxepices.net/sites/default/files/drawn-ume-blossom-tree-583778-234250.jpg
242 | https://2.bp.blogspot.com/-4DtxDWNyE7k/UTf7QpMn1uI/AAAAAAAALAk/4842b1p3hpo/s640/P1270278+stardust.jpg
243 | https://d3bgpou42ib87j.cloudfront.net/2114/8551/4927/07_pink_ume_blossoms_-_Minabe_bairin_ume_festival.jpg
244 | https://image.shutterstock.com/image-photo/red-colored-ume-blossom-450w-1041079708.jpg
245 | https://st3.depositphotos.com/7610136/18586/i/1600/depositphotos_185867298-stock-photo-tokyo-japan-february-2018-ume.jpg
246 | https://micro.rohm.com/en/rohm-saijiki/kitanotenmangu/02_event/images/photo_01b.jpg
247 | http://media.istockphoto.com/photos/japanese-plumblossom-ume-flower-picture-id510218768
248 | https://girljininjapan.files.wordpress.com/2018/03/org_dsc03117.jpg?w=1000
249 | https://memegene.net/sites/default/files/wallpaper/ume-blossom-clipart/100186/ume-blossom-clipart-spring-bloom-100186-1520766.jpg
250 | https://c1.staticflickr.com/2/1682/25234259503_23e569d1a7_b.jpg
251 | https://cdn-thumbs.freeart.com/ume-japanese-plum-blossom_fa25858430.jpg
252 | http://2.bp.blogspot.com/-J4pADOZuV0Y/VQP2FYhn6sI/AAAAAAAAAZg/gmBS3Q3kbMM/s1600/IMG_3037.JPG
253 | http://good-hokkaido.info/wp-content/uploads/2017/06/hiraoka-park-ume22.jpg
254 | https://media.mutualart.com/Images/2015_09/08/00/001640246/91f2d640-4bf7-40ce-87aa-81dd8be69ff4_570.Jpeg
255 | https://cdn3.volusion.com/tpqbh.nwwma/v/vspfiles/photos/DESP09-5.jpg?1489459294
256 | https://cdn2.foap.com/images/fc53954d-7845-4960-a21e-ffc250b6d774/w640.jpg?1428536795
257 | http://hellotatami.com/wp-content/uploads/2018/02/umeinmygarden.jpg
258 | https://previews.123rf.com/images/tatsuo115/tatsuo1151702/tatsuo115170200028/71024805-at-the-ume-blossoms-in-kitano-tenmangu-shrine-kyoto-japan.jpg
259 | https://t3.ftcdn.net/jpg/01/95/43/70/500_F_195437041_6JWJx8biDKKd7QSlfTXw6qThStGdvjWs.jpg
260 | https://media-cdn.tripadvisor.com/media/photo-s/0e/75/c3/53/photo4jpg.jpg
261 | https://i0.wp.com/3.bp.blogspot.com/-VrC21NXXmMc/VteCpopZoeI/AAAAAAAAEd8/SoQMbxe12gU/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B8.jpg?ssl=1
262 | https://c8.alamy.com/comp/RA5PHG/ume-flower-in-kyoto-japan-japan-is-a-country-located-in-the-east-asia-RA5PHG.jpg
263 | https://i.pinimg.com/originals/5b/25/05/5b2505fe7719a674d20e739bb533a8d1.jpg
264 | https://en.pimg.jp/040/203/070/1/40203070.jpg
265 | https://images-na.ssl-images-amazon.com/images/I/81gSzAIr82L._SY355_.jpg
266 | https://myaukun.files.wordpress.com/2013/03/kairakuen16.jpg?w=529
267 | https://static3.bigstockphoto.com/7/1/1/large1500/117980585.jpg
268 | https://thumbs.dreamstime.com/z/white-ume-blossom-plum-blossom-near-yushima-shinto-shrine-tokyo-japan-march-white-ume-blossom-plum-blossom-harbinger-111603579.jpg
269 | https://cdn.shopify.com/s/files/1/0764/0435/files/umeHero.jpg?v=1492845771
270 | https://as2.ftcdn.net/jpg/02/04/73/81/500_F_204738191_1nufxKqs2VXXN613VuQsDcOjhYa4x10p.jpg
271 | https://2.bp.blogspot.com/-OzNAJ_FyqJs/VuVPRy2Km9I/AAAAAAAAFU8/q6LxetzEtIc41oU6ni_g22T3C14QcTIqg/s1600/white%2Bume%2Bblossoms-engakuji02.jpg
272 | https://art4clip.com/images/drawn-ume-blossom-plum-blossom-18.jpg
273 | https://find-your-jpn.com/wp-content/uploads/2017/05/ume-blossoms-in-the-shrine2-1024x768.jpg
274 | https://media.gettyimages.com/photos/tokyo-ume-blossoms-picture-id143252120
275 | https://i.etsystatic.com/5277454/r/il/11c156/1774316405/il_570xN.1774316405_naa2.jpg
276 | http://www.jp-rail-sg.com/wp-content/uploads/sites/3/2016/01/1060705.jpg
277 | http://oeilphotography.com/wp-content/uploads/2015/02/ume-taura-002.jpg
278 | https://cdn.shopify.com/s/files/1/1039/4478/products/A37_28986a67-d6d6-4da0-a8d0-e7ce0cf98654_1024x1024.jpg?v=1523866565
279 | https://media2.trover.com/T/531de344d809d8352f000e1c/fixedw_large_4x.jpg
280 | https://media.istockphoto.com/photos/pink-flower-ume-blossoms-picture-id597265004
281 | https://memegene.net/sites/default/files/wallpaper/drawn-ume-blossom/325413/drawn-ume-blossom-painting-325413-6707665.jpg
282 | https://cdn-thumbs.barewalls.com/ume-flower-in-japan-temple_bwc26230843.jpg
283 | https://ctl.s6img.com/society6/img/GUsKmCP2s9rWcHwdSi-56UB9t8g/w_700/prints/~artwork/s6-0041/a/18573528_13276812/~~/ume-blossom-prints.jpg?wait=0&attempt=0
284 | https://cdn01.pinkoi.com/product/1KULQWwz/0/2/800x0.jpg
285 | https://d3dupjkkwlat3o.cloudfront.net/266287998802/9227984/780w?1429723634
286 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800077/61270543-ume-flower-japanese-plum-blossom.jpg
287 | https://dumielauxepices.net/sites/default/files/ume-blossom-clipart-artistic-809102-4545152.jpg
288 | https://cdn2.foap.com/images/c8e06c0da2e6446aad63fa440e84ccf5/web_preview.jpg?1367844903
289 | https://rlv.zcache.com/ume_branch_shadowed_butterfly_shaped_ume_blossom_notebook-red026b4eb2994486bbfa0b2d749a6145_ambg4_8byvr_307.jpg
290 | https://image.jimcdn.com/app/cms/image/transf/dimension=1920x400:format=jpg/path/scb4c1da40a82c039/image/i72c615188269d53c/version/1392543988/image.jpg
291 | https://media-cdn.tripadvisor.com/media/photo-s/03/7c/36/58/caption.jpg
292 | http://www.fiftyby30.com/wp-content/uploads/2014/03/yoyogipark3.jpg
293 | https://t4.ftcdn.net/jpg/02/22/99/39/240_F_222993929_9drJ9XvokQbnDbnyCi0aMljnBIrEEXkD.jpg
294 | https://c1.staticflickr.com/5/4783/40754502091_17a58bc4fc_b.jpg
295 | https://a3.cdn.japantravel.com/photo/3802-23656/1000/tokyo-ume-blossoms-at-hamarikyu-graden0-23656.jpg
296 | https://i.pinimg.com/originals/a6/fd/9d/a6fd9df6c1cd4875f9647f438e7ec5c3.jpg
297 | https://komorebishop.eu/71-large_default/ume-blossom-notebook.jpg
298 | https://images.assetsdelivery.com/compings_v2/shimokoshi/shimokoshi1601/shimokoshi160100022.jpg
299 | http://www.jsjapan.com/blog/wp-content/uploads/2015/03/DSC01245.jpg
300 | https://cdn7.bigcommerce.com/s-xsmdjjwz92/images/stencil/1280x1280/products/368/2727/ps73__48192.1508551873.jpg?c=2&imbypass=on
301 | https://st3.depositphotos.com/7610136/18586/i/1600/depositphotos_185866828-stock-photo-tokyo-japan-february-2018-ume.jpg
302 | https://images-na.ssl-images-amazon.com/images/I/513HQm2vtHL._SY355_.jpg
303 | http://ryuutoo.com/wp-content/uploads/2017/03/ume.jpg
304 | https://1.bp.blogspot.com/-qRL0ZDREe7g/WpJieTnYXdI/AAAAAAAAGDk/KCBVCkCNomU9iCONrjY1Zv6fU_q73tY0QCLcBGAs/s1600/white%2Bume%2Bblossoms_engakuji01.jpg
305 | https://c8.alamy.com/comp/RA5PFM/ume-flower-in-kyoto-japan-japan-is-a-country-located-in-the-east-asia-RA5PFM.jpg
306 | https://en.pimg.jp/039/056/312/1/39056312.jpg
307 | http://www.artnet.com/WebServices/images/ll00447llduo9GFgyVECfDrCWvaHBOcRaXE/chosei-miwa-red-colored-ume-blossom.jpg
308 | https://takuminasuno.com/wp-content/uploads/2015/03/Ume-Blossoms-at-Yoyogi-Hachimangu-Shrine-840x560.jpg
309 | https://www.japanbullet.com/images/2014/01/HamarikyuGardensjan12.jpg
310 | https://media.gettyimages.com/photos/ume-blossom-in-snow-picture-id996095976
311 | http://1.bp.blogspot.com/-VQ9lyM3C6Oc/TuX6_VgDt4I/AAAAAAAAH8k/8VnEInFTuYA/s1600/Emperor+Palace+Ume+Near+Otemon.JPG
312 | https://img00.deviantart.net/af97/i/2015/123/6/d/butterfly_and_ume_blossoms_by_tiptapcat-d296h74.jpg
313 | https://art4clip.com/images/drawn-ume-blossom-cheery-14.jpg
314 | https://i.ebayimg.com/images/g/-HkAAOSwuUNcSsIa/s-l300.jpg
315 | http://www.jp-rail-sg.com/wp-content/uploads/sites/3/2016/01/1060709.jpg
316 | https://publicdomainphotography.com/samples/ODI1NDMzZWZlOWNmZWYw/NDUxM2VmZTljZmVmMA==/Ume-Blossom-,-Iwamoto-Mountain-Park-snow-peeked-mountain.jpg
317 | https://image.shutterstock.com/display_pic_with_logo/171744298/767799874/stock-photo-ume-blossom-tree-767799874.jpg
318 | https://photo1.ganref.jp/photo/0/a2eb7502091c11213715b7b0ae0b7b56/thumb5.jpg
319 | http://good-hokkaido.info/wp-content/uploads/2017/06/hiraoka-park-ume14.jpg
320 | https://previews.123rf.com/images/jarrun/jarrun1608/jarrun160800078/61270544-ume-flower-japanese-plum-blossom.jpg
321 | https://www.vcbf.ca/wp-content/uploads/2014/03/PlumBurnaby20070327-001.jpg
322 | https://cdn.xl.thumbs.canstockphoto.com.au/ume-japanese-plum-blossom-beautiful-pink-flower-picture_csp25255677.jpg
323 | https://images.freeimages.com/images/premium/previews/2582/25820765-ume-blossom.jpg
324 | https://cdn.shopify.com/s/files/1/1039/4478/products/il_fullxfull.1148337709_q3zy_1024x1024.jpg?v=1481617662
325 | https://www.nippon.com/en/ncommon/contents/guide-to-japan/119616/119616.jpg
326 | https://memegene.net/sites/default/files/wallpaper/ume-blossom-clipart/100197/ume-blossom-clipart-jpeg-100197-6715146.jpg
327 | https://media-cdn.tripadvisor.com/media/photo-s/0a/7e/5b/65/caption.jpg
328 | https://img.fotocommunity.com/japanese-apricot-ume-blossom-3-cb112a9c-46a1-4f46-b81e-0fc90f9d00cd.jpg?height=1000
329 | https://find-your-jpn.com/wp-content/uploads/2017/05/ume-blossoms-I-saw-while-waiting2-1024x768.jpg
330 | https://thumbs.dreamstime.com/z/ume-flower-japan-temple-39541444.jpg
331 | https://t4.ftcdn.net/jpg/02/44/78/21/500_F_244782113_eZYkCGVWTw24h7FNkuG5Anni3K0je948.jpg
332 | https://yurihama.files.wordpress.com/2010/03/img_0294ume.jpg
333 | https://previews.agefotostock.com/previewimage/medibigoff/b368553d2a3f74f2cd8d7bbb1a3e33db/oth-st-ggg5234-1602.jpg
334 | http://tokyojinja.files.wordpress.com/2011/02/img_2495.jpg?resize=500%2C375
335 | https://image.jimcdn.com/app/cms/image/transf/dimension=1920x400:format=jpg/path/scb4c1da40a82c039/image/i71ccef2407d80767/version/1392543988/image.jpg
336 | https://i.etsystatic.com/12800446/r/il/72f9f3/1564972019/il_570xN.1564972019_qtkc.jpg
337 | https://takuminasuno.com/wp-content/uploads/2015/03/Gentle-Ume-Blossoms-at-Ikegami-Baien-Plum-Garden.jpg
338 | https://en.pimg.jp/038/685/539/1/38685539.jpg
339 | http://www.jsjapan.com/blog/wp-content/uploads/2015/03/DSC01216.jpg
340 | https://c8.alamy.com/comp/B9BG9J/close-up-of-a-white-prunus-mume-flower-B9BG9J.jpg
341 | https://i2.wp.com/2.bp.blogspot.com/-cyEI80IMl34/VteB8LX-gQI/AAAAAAAAEdc/_qtcM_KdzuQ/s1600/plum%2Bume%2Bblossoms%2Bin%2Bhamarikyu%2Bjapanese%2Bgarden%2Btokyo%2Bjapan%2B2016%2B3.jpg?ssl=1
342 | https://i.pinimg.com/originals/cf/d4/56/cfd4567dbf6a1795540571476dad2f42.png
343 | http://4.bp.blogspot.com/-QkJ1PX0r9Nw/TuX7aiKwAKI/AAAAAAAAH80/TqE2DrAnadY/s1600/Emperor+Palace+Ume+Near+Otemon+Red+Closeup.JPG
344 | https://c1.staticflickr.com/9/8618/16423261590_d7f280ca6e_b.jpg
345 | https://images1.sw-cdn.net/product/picture/710x528_2632197_2046363_1459311243.jpg
346 | https://media.gettyimages.com/photos/ume-blossom-picture-id556590231
347 | https://images.freeimages.com/images/large-previews/8b6/ume-blossom-1250393.jpg
348 | http://media.gettyimages.com/photos/ume-blossom-picture-id1057464602?s=170667a&w=1007
349 | https://media.istockphoto.com/photos/ume-blossom-picture-id1057464658?k=6&m=1057464658&s=612x612&w=0&h=AbMXyMI_Wy3-g6vzKyJ6sBcWliP662IAFHukIOi8DQ0=
350 | https://www.militaryfactory.com/aircraft/imgs/kawanishi-baika-pilot-guided-pulsejet-powered-suicide-aircraft-imperial-japan.jpg
351 | http://www.ejinsight.com/wp-content/uploads/2016/05/1304981_d0141f74cea475ab4763e90e792a1337-692x360.jpg
352 | http://2.bp.blogspot.com/_OPKpPIV_46E/SOaiwgpX4LI/AAAAAAAACiU/utO0qDx0V98/s400/Oct+3+%28Fri%29+201.jpg
353 | https://www.giftsoftheorient.co.uk/ekmps/shops/wallgren/images/miso-salad-bowl-set-ume-blossom-on-red-lacquer-japanese-for-four-2197-p.jpg
354 | https://as2.ftcdn.net/jpg/01/26/20/17/500_F_126201737_Pa8MRjSB2v92lG3Q0uhtX2v2b5w05EBK.jpg
355 | https://pds.exblog.jp/pds/1/201901/22/94/d0025294_19165894.jpg
356 | https://image1.masterfile.com/getImage/859-03042431em-japanese-plum-ume-flower-stock-photo.jpg
357 | https://i.ebayimg.com/images/g/WsUAAOSwTB5boLOo/s-l300.jpg
358 | https://a3.cdn.japantravel.com/photo/3802-23658/320x240!/tokyo-ume-blossoms-at-hamarikyu-graden0-23658.jpg
359 | https://slowtrip-saga.com/wp-content/uploads/2018/03/ume03-600x400.jpg
360 | https://memegene.net/sites/default/files/wallpaper/ume-blossom-clipart/100186/ume-blossom-clipart-spring-bloom-100186-7598140.jpg
361 | https://cdn11.bigcommerce.com/s-ob7m2s98/images/stencil/1000x1000/products/15267/45366/Screen_Shot_2019-02-10_at_11.04.46_AM__72656.1549814896.png?c=2
362 | https://ctl.s6img.com/society6/img/JlMmXyH8UeBe0Uz42FlyWtBSPB0/h_264,w_264/rugs/horizontal/medium/~artwork,fw_3000,fh_4500,fx_-53,iw_3105,ih_4500/s6-original-art-uploads/society6/uploads/misc/4b3626dd52ff4f85ae50d403c67b614a/~~/ume-blossom1767209-rugs.jpg
363 | https://t4.ftcdn.net/jpg/01/95/71/27/500_F_195712729_QtDVaJFQ1jkFMSec1Q5ZvRtJHWCMmMo2.jpg
364 | https://media-cdn.tripadvisor.com/media/photo-s/0d/bb/51/a7/photo8jpg.jpg
365 | https://thumbs.worthpoint.com/wpimages/images/images1/1/0710/08/1_695806c0ed95c274e559e6d49397d4db.jpg
366 | http://www.fiftyby30.com/wp-content/uploads/2014/02/ume2.jpg
367 | https://static2.bigstockphoto.com/0/4/2/large1500/240342871.jpg
368 | http://oeilphotography.com/wp-content/uploads/2015/02/ume-taura-003.jpg
369 | http://static1.squarespace.com/static/5911d3eedb29d6de5d2bc1c7/5bea590aaa4a99929f72e7f4/5c2ee5604ae2370858310718/1547086071974/Tea+SetsIMG_1943.JPG
370 | https://gopc.olympus-global.com/photos/hd.php?cd=352708&yr=2017
371 | http://regex.info/i/2006_03_24_Ume_blossom_Zuishinin_Temple_DSC_0005.jpg
372 | http://www.city.yokohama.lg.jp/kohoku/sinkou/kanbaikai/image/stage32018.jpg
373 | https://i.pinimg.com/originals/84/7f/81/847f81ff5e9d9cc4aeccd7f5c6af0886.jpg
374 | http://kyotofoodie.com/wp-content/uploads/2009/02/ume-blossom-and-furosen-sake-5.jpg
375 | https://takuminasuno.com/wp-content/uploads/2015/02/Ume-Blossoms-with-Blue-Sky-at-Shinjuku-Central-Park.jpg
376 | https://en.pimg.jp/029/389/883/1/29389883.jpg
377 | https://c1.staticflickr.com/5/4772/40754346771_a5b675790e_b.jpg
378 | http://2.bp.blogspot.com/_pYhCZYfDjUA/TSm0ZwlZwPI/AAAAAAAABNA/GN-ktQs-zfQ/s1600/Plum+blossom.JPG
379 | https://i.etsystatic.com/5678681/r/il/959be9/1133602985/il_570xN.1133602985_iszo.jpg
380 | http://good-hokkaido.info/wp-content/uploads/2017/06/hiraoka-park-ume13.jpg
381 | https://i1.wp.com/3.bp.blogspot.com/-UPSGUpvCPA4/VPgHjIEh4OI/AAAAAAAACGY/1SSSZsM8fx8/s1600/plum%2Bume%2Bblossoms%2Bin%2Btokyo%2Bjapan.jpg
382 | https://takaracrafts.co.uk/wp-content/uploads/2017/04/Plum-Blossom-Bobby-Pin01-330x330.jpg
383 | https://www.nippon.com/en/ncommon/contents/guide-to-japan/119617/119617.jpg
384 | https://images-na.ssl-images-amazon.com/images/I/71bqF7LTn9L._SX425_.jpg
385 | http://www.visitkansai.com/wp-content/uploads/2012/02/att_plumblossom2_m.jpg
386 | https://www.skyjiroforge.com/images/201301/b95245e3cada0ec85df41f221495663c_04.jpg
387 | https://static.wixstatic.com/media/3ed085_aeec9798f649488083830ff23cdef7ff~mv2_d_3264_2448_s_4_2.jpg/v1/fill/w_593,h_445,al_c,q_80,usm_0.66_1.00_0.01/3ed085_aeec9798f649488083830ff23cdef7ff~mv2_d_3264_2448_s_4_2.jpg
388 | https://i0.wp.com/farm2.staticflickr.com/1532/25266655410_b0bd99d393_b.jpg?resize=749%2C749&ssl=1
389 | https://www.happy-stitch.net/wp-content/uploads/2013/04/ume-blossom-temari-5.jpg
390 | https://media.istockphoto.com/photos/ume-blossom-ume-tree-picture-id1061525002?b=1&k=6&m=1061525002&s=170667a&h=AJKDvhCOG9VR-Lb6aI3TIK5g1fxACucW4HXj73MdaRk=
391 | https://farm3.static.flickr.com/2410/2304532520_fef9c3cd43.jpg
392 | https://i.cloudup.com/IDTgrdKSHC-900x900.jpeg
393 | https://www.discovery-japan.me/wp-content/uploads/2016/02/2016-02-25_172445.jpg
394 | https://memegene.net/sites/default/files/wallpaper/drawn-ume-blossom/325417/drawn-ume-blossom-brush-325417-2003806.jpg
395 | https://media-cdn.tripadvisor.com/media/photo-s/0a/e1/94/29/yushima-tenjin-ume-blossom.jpg
396 | https://image.jimcdn.com/app/cms/image/transf/dimension=1920x400:format=jpg/path/scb4c1da40a82c039/image/i7fefb1c91c297ad9/version/1392540880/image.jpg
397 | https://i.ebayimg.com/images/g/UzwAAOSwgadcWTqe/s-l300.jpg
398 | https://media.istockphoto.com/photos/ume-blossom-picture-id1056321578?k=6&m=1056321578&s=612x612&w=0&h=YWJCY8-4znXrmPIL4jEimmL8iPM9hG7ptv9ECo1hm58=
399 | https://cdn2.foap.com/images/a75444bf-7ca0-4a1f-88fd-64fa8f47a005/w640.jpg?1486301076
400 | https://a3.cdn.japantravel.com/photo/3802-23660/320x240!/tokyo-ume-blossoms-at-hamarikyu-graden0-23660.jpg
--------------------------------------------------------------------------------
/mini-lessons/text/gpt2_fastai.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "kernelspec": {
6 | "display_name": "Python 3",
7 | "language": "python",
8 | "name": "python3"
9 | },
10 | "language_info": {
11 | "codemirror_mode": {
12 | "name": "ipython",
13 | "version": 3
14 | },
15 | "file_extension": ".py",
16 | "mimetype": "text/x-python",
17 | "name": "python",
18 | "nbconvert_exporter": "python",
19 | "pygments_lexer": "ipython3",
20 | "version": "3.6.8"
21 | },
22 | "colab": {
23 | "name": "gpt2-fastai.ipynb",
24 | "version": "0.3.2",
25 | "provenance": [],
26 | "include_colab_link": true
27 | }
28 | },
29 | "cells": [
30 | {
31 | "cell_type": "markdown",
32 | "metadata": {
33 | "id": "view-in-github",
34 | "colab_type": "text"
35 | },
36 | "source": [
37 | " "
38 | ]
39 | },
40 | {
41 | "cell_type": "code",
42 | "metadata": {
43 | "id": "Jrf17eHRgugt",
44 | "colab_type": "code",
45 | "colab": {}
46 | },
47 | "source": [
48 | "%reload_ext autoreload\n",
49 | "%autoreload 2\n",
50 | "%matplotlib inline"
51 | ],
52 | "execution_count": 0,
53 | "outputs": []
54 | },
55 | {
56 | "cell_type": "code",
57 | "metadata": {
58 | "id": "2g2Us8Ibguhe",
59 | "colab_type": "code",
60 | "colab": {}
61 | },
62 | "source": [
63 | "from fastai import *\n",
64 | "from fastai.text import *"
65 | ],
66 | "execution_count": 0,
67 | "outputs": []
68 | },
69 | {
70 | "cell_type": "code",
71 | "metadata": {
72 | "id": "IEu729BZguh6",
73 | "colab_type": "code",
74 | "colab": {}
75 | },
76 | "source": [
77 | "path = untar_data(URLs.IMDB_SAMPLE)"
78 | ],
79 | "execution_count": 0,
80 | "outputs": []
81 | },
82 | {
83 | "cell_type": "code",
84 | "metadata": {
85 | "id": "ma9L0pzHguiS",
86 | "colab_type": "code",
87 | "colab": {},
88 | "outputId": "c594d394-bcde-4ecc-f073-27b1d4984986"
89 | },
90 | "source": [
91 | "df = pd.read_csv(path/'texts.csv')\n",
92 | "df.head()"
93 | ],
94 | "execution_count": 0,
95 | "outputs": [
96 | {
97 | "output_type": "execute_result",
98 | "data": {
99 | "text/html": [
100 | "
\n",
101 | "\n",
114 | "
\n",
115 | " \n",
116 | " \n",
117 | " \n",
118 | " label \n",
119 | " text \n",
120 | " is_valid \n",
121 | " \n",
122 | " \n",
123 | " \n",
124 | " \n",
125 | " 0 \n",
126 | " negative \n",
127 | " Un-bleeping-believable! Meg Ryan doesn't even ... \n",
128 | " False \n",
129 | " \n",
130 | " \n",
131 | " 1 \n",
132 | " positive \n",
133 | " This is a extremely well-made film. The acting... \n",
134 | " False \n",
135 | " \n",
136 | " \n",
137 | " 2 \n",
138 | " negative \n",
139 | " Every once in a long while a movie will come a... \n",
140 | " False \n",
141 | " \n",
142 | " \n",
143 | " 3 \n",
144 | " positive \n",
145 | " Name just says it all. I watched this movie wi... \n",
146 | " False \n",
147 | " \n",
148 | " \n",
149 | " 4 \n",
150 | " negative \n",
151 | " This movie succeeds at being one of the most u... \n",
152 | " False \n",
153 | " \n",
154 | " \n",
155 | "
\n",
156 | "
"
157 | ],
158 | "text/plain": [
159 | " label text is_valid\n",
160 | "0 negative Un-bleeping-believable! Meg Ryan doesn't even ... False\n",
161 | "1 positive This is a extremely well-made film. The acting... False\n",
162 | "2 negative Every once in a long while a movie will come a... False\n",
163 | "3 positive Name just says it all. I watched this movie wi... False\n",
164 | "4 negative This movie succeeds at being one of the most u... False"
165 | ]
166 | },
167 | "metadata": {
168 | "tags": []
169 | },
170 | "execution_count": 4
171 | }
172 | ]
173 | },
174 | {
175 | "cell_type": "markdown",
176 | "metadata": {
177 | "id": "DmV9zNy0hE0w",
178 | "colab_type": "text"
179 | },
180 | "source": [
181 | "We'll looking a little bit at this [library](https://huggingface.co/pytorch-transformers/) for state-of-the-art NLP models"
182 | ]
183 | },
184 | {
185 | "cell_type": "code",
186 | "metadata": {
187 | "id": "lE11GT5jgujS",
188 | "colab_type": "code",
189 | "colab": {}
190 | },
191 | "source": [
192 | "#!pip install pytorch_transformers\n",
193 | "from pytorch_transformers import *"
194 | ],
195 | "execution_count": 0,
196 | "outputs": []
197 | },
198 | {
199 | "cell_type": "code",
200 | "metadata": {
201 | "id": "PkuosbN6guji",
202 | "colab_type": "code",
203 | "colab": {},
204 | "outputId": "707f8f67-4307-40c3-e036-222fd7d15e78"
205 | },
206 | "source": [
207 | "gpt2_tokenizer = GPT2Tokenizer.from_pretrained(\"gpt2\")\n",
208 | "gpt2_tokenizer.save_vocabulary(\".\")"
209 | ],
210 | "execution_count": 0,
211 | "outputs": [
212 | {
213 | "output_type": "execute_result",
214 | "data": {
215 | "text/plain": [
216 | "('./vocab.json', './merges.txt')"
217 | ]
218 | },
219 | "metadata": {
220 | "tags": []
221 | },
222 | "execution_count": 6
223 | }
224 | ]
225 | },
226 | {
227 | "cell_type": "code",
228 | "metadata": {
229 | "id": "MXZ6OGZOguj5",
230 | "colab_type": "code",
231 | "colab": {}
232 | },
233 | "source": [
234 | "EOS = BOS = gpt2_tokenizer.all_special_tokens[0]\n",
235 | "#defaults.text_post_rules = []\n",
236 | "#defaults.text_pre_rules = [fix_html]"
237 | ],
238 | "execution_count": 0,
239 | "outputs": []
240 | },
241 | {
242 | "cell_type": "code",
243 | "metadata": {
244 | "id": "RvNa-FjHgukI",
245 | "colab_type": "code",
246 | "colab": {}
247 | },
248 | "source": [
249 | "class GPTFastaiTokenizer(BaseTokenizer):\n",
250 | " \"Basic class for a tokenizer function.\"\n",
251 | " def __init__(self, lang:str): self.lang = lang\n",
252 | " def tokenizer(self, t:str) -> List[str]: \n",
253 | " return gpt2_tokenizer.tokenize(t)\n",
254 | " def add_special_cases(self, toks:Collection[str]): pass"
255 | ],
256 | "execution_count": 0,
257 | "outputs": []
258 | },
259 | {
260 | "cell_type": "code",
261 | "metadata": {
262 | "id": "5gQucaQwgukW",
263 | "colab_type": "code",
264 | "colab": {}
265 | },
266 | "source": [
267 | "itos_json = json.load(open(\"vocab.json\"))\n",
268 | "itos = [k for v,k in enumerate(itos_json)]"
269 | ],
270 | "execution_count": 0,
271 | "outputs": []
272 | },
273 | {
274 | "cell_type": "code",
275 | "metadata": {
276 | "id": "4DTRZ3QKgukt",
277 | "colab_type": "code",
278 | "colab": {}
279 | },
280 | "source": [
281 | "tokenizer = GPTFastaiTokenizer(\"en\")\n",
282 | "processor = [TokenizeProcessor(Tokenizer(tokenizer)),NumericalizeProcessor(vocab=Vocab(itos))]"
283 | ],
284 | "execution_count": 0,
285 | "outputs": []
286 | },
287 | {
288 | "cell_type": "code",
289 | "metadata": {
290 | "id": "B1nSkLOogulB",
291 | "colab_type": "code",
292 | "colab": {}
293 | },
294 | "source": [
295 | "class GPT2LMWrapper(GPT2LMHeadModel):\n",
296 | " def __init__(self, config):\n",
297 | " super(GPT2LMHeadModel, self).__init__(config)\n",
298 | " self.transformer = GPT2Model(config)\n",
299 | " self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)\n",
300 | "\n",
301 | " self.apply(self.init_weights)\n",
302 | " self.tie_weights()\n",
303 | "\n",
304 | " def tie_weights(self):\n",
305 | " \"\"\" Make sure we are sharing the input and output embeddings.\n",
306 | " Export to TorchScript can't handle parameter sharing so we are cloning them instead.\n",
307 | " \"\"\"\n",
308 | " self._tie_or_clone_weights(self.lm_head,\n",
309 | " self.transformer.wte)\n",
310 | " \n",
311 | " def reset(self):pass\n",
312 | " \n",
313 | " def forward(self, input_ids, position_ids=None, token_type_ids=None, labels=None, past=None, head_mask=None):\n",
314 | " transformer_outputs = self.transformer(input_ids, position_ids=position_ids, token_type_ids=token_type_ids,\n",
315 | " past=past, head_mask=head_mask)\n",
316 | " hidden_states = transformer_outputs[0]\n",
317 | "\n",
318 | " lm_logits = self.lm_head(hidden_states)\n",
319 | "\n",
320 | " outputs = (lm_logits,) + transformer_outputs + transformer_outputs\n",
321 | " if labels is not None:\n",
322 | " # Shift so that tokens < n predict n\n",
323 | " shift_logits = lm_logits[..., :-1, :].contiguous()\n",
324 | " shift_labels = labels[..., 1:].contiguous()\n",
325 | " # Flatten the tokens\n",
326 | " loss_fct = CrossEntropyLoss(ignore_index=-1)\n",
327 | " loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)),\n",
328 | " shift_labels.view(-1))\n",
329 | " outputs = (loss,) + outputs\n",
330 | "\n",
331 | " return outputs # (loss), lm_logits, presents, (all hidden_states), (attentions)"
332 | ],
333 | "execution_count": 0,
334 | "outputs": []
335 | },
336 | {
337 | "cell_type": "code",
338 | "metadata": {
339 | "id": "ZQ2ZBCpSgulR",
340 | "colab_type": "code",
341 | "colab": {}
342 | },
343 | "source": [
344 | "model = GPT2LMWrapper.from_pretrained('gpt2')"
345 | ],
346 | "execution_count": 0,
347 | "outputs": []
348 | },
349 | {
350 | "cell_type": "code",
351 | "metadata": {
352 | "id": "8i9Y8DL5gulj",
353 | "colab_type": "code",
354 | "colab": {}
355 | },
356 | "source": [
357 | "from fastai.callbacks import *"
358 | ],
359 | "execution_count": 0,
360 | "outputs": []
361 | },
362 | {
363 | "cell_type": "code",
364 | "metadata": {
365 | "id": "gUP6OauCguly",
366 | "colab_type": "code",
367 | "colab": {}
368 | },
369 | "source": [
370 | "data_lm = (TextList.from_df(df,path,cols=\"text\",processor=processor)\n",
371 | " .split_by_rand_pct()\n",
372 | " .label_for_lm()\n",
373 | " .databunch())"
374 | ],
375 | "execution_count": 0,
376 | "outputs": []
377 | },
378 | {
379 | "cell_type": "code",
380 | "metadata": {
381 | "id": "FC1v9V7mgul9",
382 | "colab_type": "code",
383 | "colab": {},
384 | "outputId": "f04d2a77-3398-4ab1-e5ad-9d850e65fa62"
385 | },
386 | "source": [
387 | "data_lm.show_batch()"
388 | ],
389 | "execution_count": 0,
390 | "outputs": [
391 | {
392 | "output_type": "display_data",
393 | "data": {
394 | "text/html": [
395 | "\n",
396 | " \n",
397 | " \n",
398 | " idx \n",
399 | " text \n",
400 | " \n",
401 | " \n",
402 | " \n",
403 | " \n",
404 | " 0 \n",
405 | " ! ! ! ! ! this was directed by the guy who did ! big ! ! ? ! must be a ! of ! ! - ! style . ! ! ! ! ! this is a extremely well - made film . ! the acting , script and camera - work are all first - rate . ! the music is good , too , though it is \n",
406 | " \n",
407 | " \n",
408 | " 1 \n",
409 | " / 2 hours . i expected more about ! son of ! sam and instead got a movie that ! to have very little to do with the 1977 serial ! . ! the talking dog was ! ( you know you 're in ! when all the movie ! burst into laughter ! ) . ! the ! movie ! very ! and not very interesting . ! the \n",
410 | " \n",
411 | " \n",
412 | " 2 \n",
413 | " series ! it a ! telling ! to the ! . ! ! , ! ! ! is a pretty \" modern \" girl when you think about it , even though the ! of ! ! ! ! 's world may ! a ! ! to us today . ! if you have ! ! ! ! , i 'll only say that self - sufficient ! ! does \n",
414 | " \n",
415 | " \n",
416 | " 3 \n",
417 | " , particularly the use of ! or ! on head and ! hair . ! ! this film is the only one that ! with some ! ! ! ' original ! ! as has been ! . ! ! may find it ! to note plot details that ! here that are ! ! in other versions of the story . ! ! ' description of the ! ! \n",
418 | " \n",
419 | " \n",
420 | " 4 \n",
421 | " ! once wrote about that , \" we should all try to hang around with ! of other ! and try to know them . \" ! ! you 're ! your own ! . ! ! ! ! ! in one of those ! i ! . ! one time someone put ! around campus talking about the ! of the ! ! ! race and had the ! \n",
422 | " \n",
423 | " \n",
424 | "
"
425 | ],
426 | "text/plain": [
427 | ""
428 | ]
429 | },
430 | "metadata": {
431 | "tags": []
432 | }
433 | }
434 | ]
435 | },
436 | {
437 | "cell_type": "code",
438 | "metadata": {
439 | "id": "FHscvbHEgumQ",
440 | "colab_type": "code",
441 | "colab": {}
442 | },
443 | "source": [
444 | "learn = LanguageLearner(data_lm,model)"
445 | ],
446 | "execution_count": 0,
447 | "outputs": []
448 | },
449 | {
450 | "cell_type": "code",
451 | "metadata": {
452 | "id": "lwasZ2FBgumi",
453 | "colab_type": "code",
454 | "colab": {},
455 | "outputId": "0b8c7b1a-d30e-4c6e-85b6-c2699eccb171"
456 | },
457 | "source": [
458 | "learn.lr_find()\n",
459 | "learn.recorder.plot()"
460 | ],
461 | "execution_count": 0,
462 | "outputs": [
463 | {
464 | "output_type": "display_data",
465 | "data": {
466 | "text/html": [
467 | ""
468 | ],
469 | "text/plain": [
470 | ""
471 | ]
472 | },
473 | "metadata": {
474 | "tags": []
475 | }
476 | },
477 | {
478 | "output_type": "stream",
479 | "text": [
480 | "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
481 | ],
482 | "name": "stdout"
483 | },
484 | {
485 | "output_type": "display_data",
486 | "data": {
487 | "image/png": "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\n",
488 | "text/plain": [
489 | ""
490 | ]
491 | },
492 | "metadata": {
493 | "tags": [],
494 | "needs_background": "light"
495 | }
496 | }
497 | ]
498 | },
499 | {
500 | "cell_type": "code",
501 | "metadata": {
502 | "id": "8DfRUVdsgum3",
503 | "colab_type": "code",
504 | "colab": {},
505 | "outputId": "86fecd95-2d19-456d-8b30-214aa3dbd8d7"
506 | },
507 | "source": [
508 | "learn.fit_one_cycle(15,3e-3,moms=(0.7,0.8))"
509 | ],
510 | "execution_count": 0,
511 | "outputs": [
512 | {
513 | "output_type": "display_data",
514 | "data": {
515 | "text/html": [
516 | "\n",
517 | " \n",
518 | " \n",
519 | " epoch \n",
520 | " train_loss \n",
521 | " valid_loss \n",
522 | " accuracy \n",
523 | " time \n",
524 | " \n",
525 | " \n",
526 | " \n",
527 | " \n",
528 | " 0 \n",
529 | " 4.842220 \n",
530 | " 4.403178 \n",
531 | " 0.281824 \n",
532 | " 00:57 \n",
533 | " \n",
534 | " \n",
535 | " 1 \n",
536 | " 4.287532 \n",
537 | " 3.765579 \n",
538 | " 0.314429 \n",
539 | " 00:57 \n",
540 | " \n",
541 | " \n",
542 | " 2 \n",
543 | " 3.825458 \n",
544 | " 3.423177 \n",
545 | " 0.345966 \n",
546 | " 00:57 \n",
547 | " \n",
548 | " \n",
549 | " 3 \n",
550 | " 3.545260 \n",
551 | " 3.327716 \n",
552 | " 0.357733 \n",
553 | " 00:57 \n",
554 | " \n",
555 | " \n",
556 | " 4 \n",
557 | " 3.352965 \n",
558 | " 3.245280 \n",
559 | " 0.363361 \n",
560 | " 00:57 \n",
561 | " \n",
562 | " \n",
563 | " 5 \n",
564 | " 3.226402 \n",
565 | " 3.210527 \n",
566 | " 0.366980 \n",
567 | " 00:57 \n",
568 | " \n",
569 | " \n",
570 | " 6 \n",
571 | " 3.125595 \n",
572 | " 3.181285 \n",
573 | " 0.369834 \n",
574 | " 00:57 \n",
575 | " \n",
576 | " \n",
577 | " 7 \n",
578 | " 3.046173 \n",
579 | " 3.167163 \n",
580 | " 0.372082 \n",
581 | " 00:57 \n",
582 | " \n",
583 | " \n",
584 | " 8 \n",
585 | " 3.001789 \n",
586 | " 3.164754 \n",
587 | " 0.372130 \n",
588 | " 00:57 \n",
589 | " \n",
590 | " \n",
591 | "
"
592 | ],
593 | "text/plain": [
594 | ""
595 | ]
596 | },
597 | "metadata": {
598 | "tags": []
599 | }
600 | }
601 | ]
602 | },
603 | {
604 | "cell_type": "code",
605 | "metadata": {
606 | "id": "op6zeO9SgunL",
607 | "colab_type": "code",
608 | "colab": {}
609 | },
610 | "source": [
611 | "learn.predict(\"I liked this movie because\",n_words=70)"
612 | ],
613 | "execution_count": 0,
614 | "outputs": []
615 | },
616 | {
617 | "cell_type": "code",
618 | "metadata": {
619 | "id": "f5k6z-mQgunY",
620 | "colab_type": "code",
621 | "colab": {}
622 | },
623 | "source": [
624 | ""
625 | ],
626 | "execution_count": 0,
627 | "outputs": []
628 | }
629 | ]
630 | }
--------------------------------------------------------------------------------
/mini-lessons/text/ja_en_translate.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "colab_type": "text",
7 | "id": "view-in-github"
8 | },
9 | "source": [
10 | " "
11 | ]
12 | },
13 | {
14 | "cell_type": "code",
15 | "execution_count": 0,
16 | "metadata": {
17 | "colab": {},
18 | "colab_type": "code",
19 | "id": "i8F6rk1YwJ9P"
20 | },
21 | "outputs": [],
22 | "source": [
23 | "%reload_ext autoreload\n",
24 | "%autoreload 2\n",
25 | "%matplotlib inline"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 0,
31 | "metadata": {
32 | "colab": {},
33 | "colab_type": "code",
34 | "id": "btS8qaALwJ9b"
35 | },
36 | "outputs": [],
37 | "source": [
38 | "from fastai import *\n",
39 | "from fastai.text import *"
40 | ]
41 | },
42 | {
43 | "cell_type": "markdown",
44 | "metadata": {
45 | "colab_type": "text",
46 | "id": "LkXYHQhcwKAU"
47 | },
48 | "source": [
49 | "## Seq2Seq\n",
50 | "\n",
51 | "A sequence-to-sequence model is a model that takes a sequence of items and outputs another sequence of items using two networks that are trained end-to-end. This is perfect for machine translation since input sequences are directly related to output sequences. We will looking at preparing a dataset for Machine Translation task and implementing a seq2seq model. We will be using the parallel corpus available from [here](ftp://ftp.monash.edu/pub/nihongo/examples.utf.gz)"
52 | ]
53 | },
54 | {
55 | "cell_type": "code",
56 | "execution_count": 0,
57 | "metadata": {
58 | "colab": {},
59 | "colab_type": "code",
60 | "id": "I5KcBSgDwKAU"
61 | },
62 | "outputs": [],
63 | "source": [
64 | "def make_corpus(corpus_path):\n",
65 | " corpus = corpus_path.open().readlines()\n",
66 | " data_pair = []\n",
67 | " pat = r'#ID.+\\n'\n",
68 | " for c in corpus:\n",
69 | " if 'A: ' in c:\n",
70 | " clean_c = c.replace('A: ','')\n",
71 | " res = re.search(pat,clean_c)\n",
72 | " clean_c = clean_c.replace(res.group(0),'').split('\\t')\n",
73 | " data_pair.append((clean_c[0],clean_c[1]))\n",
74 | " return pd.DataFrame(data_pair,columns=['ja','en'])"
75 | ]
76 | },
77 | {
78 | "cell_type": "code",
79 | "execution_count": 0,
80 | "metadata": {
81 | "colab": {},
82 | "colab_type": "code",
83 | "id": "LBvnts3UwKAY",
84 | "outputId": "82c45ceb-1eae-44e3-e742-0d0ca8e2fb65"
85 | },
86 | "outputs": [
87 | {
88 | "data": {
89 | "text/html": [
90 | "\n",
91 | "\n",
104 | "
\n",
105 | " \n",
106 | " \n",
107 | " \n",
108 | " ja \n",
109 | " en \n",
110 | " \n",
111 | " \n",
112 | " \n",
113 | " \n",
114 | " 0 \n",
115 | " ムーリエルは20歳になりました。 \n",
116 | " Muiriel is 20 now. \n",
117 | " \n",
118 | " \n",
119 | " 1 \n",
120 | " すぐに戻ります。 \n",
121 | " I will be back soon. \n",
122 | " \n",
123 | " \n",
124 | " 2 \n",
125 | " すぐに諦めて昼寝をするかも知れない。 \n",
126 | " I may give up soon and just nap instead. \n",
127 | " \n",
128 | " \n",
129 | " 3 \n",
130 | " 愛してる。 \n",
131 | " I love you. \n",
132 | " \n",
133 | " \n",
134 | " 4 \n",
135 | " ログアウトするんじゃなかったよ。 \n",
136 | " I shouldn't have logged off. \n",
137 | " \n",
138 | " \n",
139 | "
\n",
140 | "
"
141 | ],
142 | "text/plain": [
143 | " ja en\n",
144 | "0 ムーリエルは20歳になりました。 Muiriel is 20 now.\n",
145 | "1 すぐに戻ります。 I will be back soon.\n",
146 | "2 すぐに諦めて昼寝をするかも知れない。 I may give up soon and just nap instead.\n",
147 | "3 愛してる。 I love you.\n",
148 | "4 ログアウトするんじゃなかったよ。 I shouldn't have logged off."
149 | ]
150 | },
151 | "execution_count": 34,
152 | "metadata": {
153 | "tags": []
154 | },
155 | "output_type": "execute_result"
156 | }
157 | ],
158 | "source": [
159 | "df = make_corpus(path/'examples.utf')\n",
160 | "df.head()"
161 | ]
162 | },
163 | {
164 | "cell_type": "code",
165 | "execution_count": 0,
166 | "metadata": {
167 | "colab": {},
168 | "colab_type": "code",
169 | "id": "3Kvee5X9wKAa",
170 | "outputId": "3890af75-7119-4f9d-bccf-0d1c27a442e1"
171 | },
172 | "outputs": [
173 | {
174 | "data": {
175 | "text/plain": [
176 | "149784"
177 | ]
178 | },
179 | "execution_count": 43,
180 | "metadata": {
181 | "tags": []
182 | },
183 | "output_type": "execute_result"
184 | }
185 | ],
186 | "source": [
187 | "len(df)"
188 | ]
189 | },
190 | {
191 | "cell_type": "code",
192 | "execution_count": 0,
193 | "metadata": {
194 | "colab": {},
195 | "colab_type": "code",
196 | "id": "x9PxAEtXwKAd",
197 | "outputId": "e75f4df0-9e53-4bbd-fc86-daf64ff6a1c1"
198 | },
199 | "outputs": [
200 | {
201 | "data": {
202 | "text/plain": [
203 | "149784"
204 | ]
205 | },
206 | "execution_count": 286,
207 | "metadata": {
208 | "tags": []
209 | },
210 | "output_type": "execute_result"
211 | }
212 | ],
213 | "source": [
214 | "valid_idxs = np.random.choice(np.arange(len(df)), int(0.1*len(df)),replace=False)\n",
215 | "train_idxs = [i for i in np.arange(len(df)) if i not in valid_idxs]\n",
216 | "len(train_idxs) + len(valid_idxs)"
217 | ]
218 | },
219 | {
220 | "cell_type": "code",
221 | "execution_count": 0,
222 | "metadata": {
223 | "colab": {},
224 | "colab_type": "code",
225 | "id": "u1UYkzBUwKAg"
226 | },
227 | "outputs": [],
228 | "source": [
229 | "#collation function and databunch code borrowed from here: \n",
230 | "#https://github.com/ohmeow/seq2seq-pytorch-fastai/blob/master/seq2seq-rnn-attn.ipynb\n",
231 | "\n",
232 | "def seq2seq_pad_collate(samples:BatchSamples, pad_idx:int=1, pad_first:bool=False, \n",
233 | " include_targets=True, include_lengths=False, include_masks=False,\n",
234 | " backwards:bool=False) -> Tuple[LongTensor, LongTensor]:\n",
235 | " \n",
236 | " \"Function that collect samples and adds padding. Flips token order if needed\"\n",
237 | " \n",
238 | " samples = to_data(samples)\n",
239 | " samples.sort(key=lambda x: len(x[0]), reverse=True)\n",
240 | " \n",
241 | " x_lens = [len(s[0]) for s in samples]\n",
242 | " x_max_len = max(x_lens)\n",
243 | " x_res = torch.zeros(len(samples), x_max_len).long() + pad_idx\n",
244 | " \n",
245 | " y_lens = [len(s[1]) for s in samples]\n",
246 | " y_max_len = max(y_lens)\n",
247 | " y_res = torch.zeros(len(samples), y_max_len).long() + pad_idx\n",
248 | " \n",
249 | " if backwards: pad_first = not pad_first\n",
250 | " \n",
251 | " for i,s in enumerate(samples):\n",
252 | " if pad_first: \n",
253 | " x_res[i,-len(s[0]):] = LongTensor(s[0])\n",
254 | " y_res[i,-len(s[1]):] = LongTensor(s[1])\n",
255 | " else: \n",
256 | " x_res[i,:len(s[0]):] = LongTensor(s[0])\n",
257 | " y_res[i,:len(s[1]):] = LongTensor(s[1])\n",
258 | " \n",
259 | " if backwards: res = res.flip(1)\n",
260 | " \n",
261 | " x = [x_res]\n",
262 | " if (include_targets): x += [y_res.clone()]\n",
263 | " if (include_lengths): x += [torch.tensor(x_lens), torch.tensor(y_lens)]\n",
264 | " if (include_masks): x += [x_res != pad_idx, y_res != pad_idx]\n",
265 | " \n",
266 | " return x, y_res\n",
267 | "\n",
268 | "\n",
269 | "class Seq2SeqDataBunch(DataBunch):\n",
270 | "\n",
271 | " @classmethod\n",
272 | " def create(cls, train_ds, valid_ds, test_ds=None, \n",
273 | " path:PathOrStr='.', bs:int=32, val_bs:int=None, pad_idx=1, pad_first=False, \n",
274 | " device:torch.device=None, no_check:bool=False, backwards:bool=False, **dl_kwargs) -> DataBunch:\n",
275 | " \n",
276 | " \"\"\"Function that transform the `datasets` in a `DataBunch` for seq2seq task. \n",
277 | " Passes `**dl_kwargs` on to `DataLoader()`\"\"\"\n",
278 | " \n",
279 | " datasets = cls._init_ds(train_ds, valid_ds, test_ds)\n",
280 | " val_bs = ifnone(val_bs, bs)\n",
281 | " \n",
282 | " collate_fn = partial(seq2seq_pad_collate, pad_idx=pad_idx, pad_first=pad_first, backwards=backwards)\n",
283 | " \n",
284 | " train_sampler = SortishSampler(datasets[0].x, key=lambda t: len(datasets[0][t][0].data), bs=bs//2)\n",
285 | " train_dl = DataLoader(datasets[0], batch_size=bs, sampler=train_sampler, drop_last=True, **dl_kwargs)\n",
286 | " \n",
287 | " dataloaders = [train_dl]\n",
288 | " for ds in datasets[1:]:\n",
289 | " lengths = [len(t) for t in ds.x.items]\n",
290 | " sampler = SortSampler(ds.x, key=lengths.__getitem__)\n",
291 | " dataloaders.append(DataLoader(ds, batch_size=val_bs, sampler=sampler, **dl_kwargs))\n",
292 | " return cls(*dataloaders, path=path, device=device, collate_fn=collate_fn, no_check=no_check)"
293 | ]
294 | },
295 | {
296 | "cell_type": "code",
297 | "execution_count": 0,
298 | "metadata": {
299 | "colab": {},
300 | "colab_type": "code",
301 | "id": "o9_Q7LXJwKAi"
302 | },
303 | "outputs": [],
304 | "source": [
305 | "class Seq2SeqTextList(TextList):\n",
306 | " _bunch = Seq2SeqDataBunch"
307 | ]
308 | },
309 | {
310 | "cell_type": "code",
311 | "execution_count": 0,
312 | "metadata": {
313 | "colab": {},
314 | "colab_type": "code",
315 | "id": "FpOxgbMTwKAk"
316 | },
317 | "outputs": [],
318 | "source": [
319 | "en_tok = Tokenizer(lang='en')\n",
320 | "en_procs = [TokenizeProcessor(tokenizer=en_tok, include_bos=True, include_eos=True), \n",
321 | " NumericalizeProcessor(min_freq=1)]"
322 | ]
323 | },
324 | {
325 | "cell_type": "code",
326 | "execution_count": 0,
327 | "metadata": {
328 | "colab": {},
329 | "colab_type": "code",
330 | "id": "jo-p4T_pwKAm"
331 | },
332 | "outputs": [],
333 | "source": [
334 | "tokenizer = Tokenizer(MeCabTokenizer, 'ja')\n",
335 | "ja_procs = [TokenizeProcessor(tokenizer=tokenizer,include_bos=True, include_eos=True), NumericalizeProcessor(max_vocab=30000,min_freq=1)]"
336 | ]
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": 0,
341 | "metadata": {
342 | "colab": {},
343 | "colab_type": "code",
344 | "id": "k3WuE-cawKAn"
345 | },
346 | "outputs": [],
347 | "source": [
348 | "en_il = Seq2SeqTextList.from_df(df, path, cols=['en'], processor=en_procs).process().split_by_idxs(train_idxs,valid_idxs)\n",
349 | "ja_il = Seq2SeqTextList.from_df(df, path, cols=['ja'], processor=ja_procs).process().split_by_idxs(train_idxs,valid_idxs)"
350 | ]
351 | },
352 | {
353 | "cell_type": "code",
354 | "execution_count": 0,
355 | "metadata": {
356 | "colab": {},
357 | "colab_type": "code",
358 | "id": "Lp77piH5wKAp"
359 | },
360 | "outputs": [],
361 | "source": [
362 | "tr_ll = LabelList(en_il.train,ja_il.train)\n",
363 | "val_ll = LabelList(en_il.valid,ja_il.valid)\n",
364 | "lls = LabelLists(path,train=tr_ll,valid=val_ll)"
365 | ]
366 | },
367 | {
368 | "cell_type": "code",
369 | "execution_count": 0,
370 | "metadata": {
371 | "colab": {},
372 | "colab_type": "code",
373 | "id": "4HU6eew3wKAr"
374 | },
375 | "outputs": [],
376 | "source": [
377 | "seq2seq_data = lls.databunch(bs=bs)"
378 | ]
379 | },
380 | {
381 | "cell_type": "code",
382 | "execution_count": 0,
383 | "metadata": {
384 | "colab": {},
385 | "colab_type": "code",
386 | "id": "cgDqNCjywKAs",
387 | "outputId": "38610cfa-b5cc-4ad0-9d41-dd8896cba213"
388 | },
389 | "outputs": [
390 | {
391 | "data": {
392 | "text/plain": [
393 | "(Text xxbos xxmaj muiriel is 20 now . xxeos,\n",
394 | " Text xxbos ムーリエル は 2 0 歳 に なり まし た 。 xxeos)"
395 | ]
396 | },
397 | "execution_count": 291,
398 | "metadata": {
399 | "tags": []
400 | },
401 | "output_type": "execute_result"
402 | }
403 | ],
404 | "source": [
405 | "seq2seq_data.train_ds[0]"
406 | ]
407 | },
408 | {
409 | "cell_type": "code",
410 | "execution_count": 0,
411 | "metadata": {
412 | "colab": {},
413 | "colab_type": "code",
414 | "id": "XejAD33ZwKAu"
415 | },
416 | "outputs": [],
417 | "source": [
418 | "en_vecs,_,dim_en_vec = load_vectors('data/wiki-news-300d-1M.vec')\n",
419 | "j_vecs,_,dim_j_vec = load_vectors('data/cc.ja.300.vec')"
420 | ]
421 | },
422 | {
423 | "cell_type": "code",
424 | "execution_count": 0,
425 | "metadata": {
426 | "colab": {},
427 | "colab_type": "code",
428 | "id": "pydn2l1bwKAw"
429 | },
430 | "outputs": [],
431 | "source": [
432 | "def create_emb(vecs, itos, em_sz):\n",
433 | " emb = nn.Embedding(len(itos), em_sz, padding_idx=1)\n",
434 | " if vecs is None: return emb\n",
435 | " wgts = emb.weight.data\n",
436 | " miss = []\n",
437 | " for i,w in enumerate(itos):\n",
438 | " try: wgts[i] = torch.from_numpy(vecs[w])\n",
439 | " except: miss.append(w)\n",
440 | " print('Number of unknowns in data: {}'.format(len(miss)))\n",
441 | " return emb\n"
442 | ]
443 | },
444 | {
445 | "cell_type": "code",
446 | "execution_count": 0,
447 | "metadata": {
448 | "colab": {},
449 | "colab_type": "code",
450 | "id": "F1roMu9AwKAx"
451 | },
452 | "outputs": [],
453 | "source": [
454 | "def rand_t(*sz): return torch.randn(sz)/math.sqrt(sz[0])\n",
455 | "def rand_p(*sz): return nn.Parameter(rand_t(*sz))"
456 | ]
457 | },
458 | {
459 | "cell_type": "code",
460 | "execution_count": 0,
461 | "metadata": {
462 | "colab": {},
463 | "colab_type": "code",
464 | "id": "HCIfiPkVwKA2"
465 | },
466 | "outputs": [],
467 | "source": [
468 | "class Seq2SeqAttention(nn.Module):\n",
469 | " def __init__(self,int2en,int2j,em_sz,j_vecs=None,en_vecs=None,nh=128,out_sl=25,dropf=1,nl=2):\n",
470 | " super().__init__()\n",
471 | " #encoder\n",
472 | " self.nl,self.nh,self.em_sz,self.out_sl = nl,nh,em_sz,out_sl\n",
473 | " self.emb_enc = create_emb(en_vecs,int2en,em_sz)\n",
474 | " self.emb_drop = nn.Dropout(0.15*dropf)\n",
475 | " self.encoder = nn.GRU(em_sz,nh,num_layers=nl,dropout=0.25*dropf, bidirectional=True,batch_first=True)\n",
476 | " #decoder\n",
477 | " self.emb_dec = create_emb(j_vecs,int2j,em_sz)\n",
478 | " self.decoder = nn.GRU(em_sz,nh*2,num_layers=nl,dropout=0.25*dropf,batch_first=True)\n",
479 | " self.out_drop = nn.Dropout(0.35*dropf)\n",
480 | " self.out = nn.Linear(nh*2,len(int2j))\n",
481 | " #attention layer\n",
482 | " self.W1 = rand_p(nh*2, nh*2) #parameter\n",
483 | " self.l2 = nn.Linear(nh*2, nh*2)\n",
484 | " self.l3 = nn.Linear(em_sz+nh*2, em_sz)\n",
485 | " self.V = rand_p(nh*2) #parameter\n",
486 | " self.targets = None\n",
487 | " \n",
488 | " def forward(self,inp,y=None):\n",
489 | " self.targets = y\n",
490 | " bs,sl = inp.size()\n",
491 | " emb_in = self.emb_drop(self.emb_enc(inp))\n",
492 | " h_n = self.initHidden(bs)\n",
493 | " enc_out, h_n = self.encoder(emb_in,h_n)\n",
494 | " h_n = h_n.view(2,2,bs,-1).permute(0,2,1,3).contiguous().view(self.nl,bs,-1)\n",
495 | " \n",
496 | " dec_inp = torch.zeros(bs).long().cuda()\n",
497 | " res,attns = [], []\n",
498 | " #multiply by parameter\n",
499 | " w1e = enc_out @ self.W1\n",
500 | " for i in range(self.out_sl):\n",
501 | " #linear layer \n",
502 | " w2h = self.l2(h_n[-1])\n",
503 | " #non-linear activation to calculate score\n",
504 | " u = torch.tanh(w1e + w2h.unsqueeze(1))\n",
505 | " #softmax to make them into probs\n",
506 | " a = F.softmax(u @ self.V, 0)\n",
507 | " attns.append(a)\n",
508 | " #multiply each vector by scores and then add them up\n",
509 | " Xa = (a.unsqueeze(2) * enc_out).sum(1)\n",
510 | " dec_emb = self.emb_dec(dec_inp)\n",
511 | " #linear layer to reduce dimensions\n",
512 | " wgt_enc = self.l3(torch.cat([dec_emb, Xa], 1))\n",
513 | " outp,h_n = self.decoder(wgt_enc.unsqueeze(1),h_n)\n",
514 | " outp = self.out(self.out_drop(outp[:,0]))\n",
515 | " res.append(outp)\n",
516 | " dec_inp = outp.data.max(1)[1]\n",
517 | " if i >=self.targets.size(1):break\n",
518 | " if (dec_inp==1).all(): break\n",
519 | " if (random.random() > 0.5) and self.targets is not None: dec_inp=y[:,i] \n",
520 | " return torch.stack(res).transpose(1,0)\n",
521 | " \n",
522 | " def initHidden(self,bs):\n",
523 | " return torch.zeros([self.nl*2,bs,self.nh]).cuda()"
524 | ]
525 | },
526 | {
527 | "cell_type": "code",
528 | "execution_count": 0,
529 | "metadata": {
530 | "colab": {},
531 | "colab_type": "code",
532 | "id": "tgE3MgKewKA4"
533 | },
534 | "outputs": [],
535 | "source": [
536 | "def seq2seq_loss(input, target):\n",
537 | " bs,sl = target.size()\n",
538 | " bs_in,sl_in,nc = input.size()\n",
539 | " if sl>sl_in: input = F.pad(input, (0,0,0,sl-sl_in,0,0))\n",
540 | " input = input[:,:sl,:]\n",
541 | " return F.cross_entropy(input.contiguous().view(-1,nc), target.contiguous().view(-1))"
542 | ]
543 | },
544 | {
545 | "cell_type": "code",
546 | "execution_count": 0,
547 | "metadata": {
548 | "colab": {},
549 | "colab_type": "code",
550 | "id": "eFmsFBajwKA6"
551 | },
552 | "outputs": [],
553 | "source": [
554 | "class TeacherForcingCallback(LearnerCallback):\n",
555 | " learn:Learner\n",
556 | " \n",
557 | " def on_batch_begin(self, train, **kwargs):\n",
558 | " learn.model.targets = kwargs['last_target']"
559 | ]
560 | },
561 | {
562 | "cell_type": "code",
563 | "execution_count": 0,
564 | "metadata": {
565 | "colab": {},
566 | "colab_type": "code",
567 | "id": "tkG597I4wKA9",
568 | "outputId": "3ef8c0a6-3dc7-4e61-eb65-6cdf9bb13279"
569 | },
570 | "outputs": [
571 | {
572 | "data": {
573 | "text/plain": [
574 | "Seq2SeqAttention(\n",
575 | " (emb_enc): Embedding(21395, 300, padding_idx=1)\n",
576 | " (emb_drop): Dropout(p=0.15)\n",
577 | " (encoder): GRU(300, 128, num_layers=2, batch_first=True, dropout=0.25, bidirectional=True)\n",
578 | " (emb_dec): Embedding(30004, 300, padding_idx=1)\n",
579 | " (decoder): GRU(300, 256, num_layers=2, batch_first=True, dropout=0.25)\n",
580 | " (out_drop): Dropout(p=0.35)\n",
581 | " (out): Linear(in_features=256, out_features=30004, bias=True)\n",
582 | " (l2): Linear(in_features=256, out_features=256, bias=True)\n",
583 | " (l3): Linear(in_features=556, out_features=300, bias=True)\n",
584 | ")"
585 | ]
586 | },
587 | "execution_count": 295,
588 | "metadata": {
589 | "tags": []
590 | },
591 | "output_type": "execute_result"
592 | }
593 | ],
594 | "source": [
595 | "seq2seq = Seq2SeqAttention(seq2seq_data.train_ds.x.vocab.itos,seq2seq_data.train_ds.y.vocab.itos,300,en_vecs=None,j_vecs=None)\n",
596 | "seq2seq.cuda()"
597 | ]
598 | },
599 | {
600 | "cell_type": "code",
601 | "execution_count": 0,
602 | "metadata": {
603 | "colab": {},
604 | "colab_type": "code",
605 | "id": "0tco_NyzwKBA"
606 | },
607 | "outputs": [],
608 | "source": [
609 | "learn = Learner(seq2seq_data,seq2seq)\n",
610 | "learn.loss_func = seq2seq_loss"
611 | ]
612 | },
613 | {
614 | "cell_type": "code",
615 | "execution_count": 0,
616 | "metadata": {
617 | "colab": {},
618 | "colab_type": "code",
619 | "id": "_Pt8Oc0awKBD"
620 | },
621 | "outputs": [],
622 | "source": [
623 | "learn.callbacks.append(TeacherForcingCallback(learn))"
624 | ]
625 | },
626 | {
627 | "cell_type": "code",
628 | "execution_count": 0,
629 | "metadata": {
630 | "colab": {},
631 | "colab_type": "code",
632 | "id": "pwqdx2n7wKBH",
633 | "outputId": "8e357689-3322-40af-c1a9-b3914fbab3f3"
634 | },
635 | "outputs": [
636 | {
637 | "data": {
638 | "text/html": [],
639 | "text/plain": [
640 | ""
641 | ]
642 | },
643 | "metadata": {
644 | "tags": []
645 | },
646 | "output_type": "display_data"
647 | },
648 | {
649 | "name": "stdout",
650 | "output_type": "stream",
651 | "text": [
652 | "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
653 | ]
654 | }
655 | ],
656 | "source": [
657 | "learn.lr_find()"
658 | ]
659 | },
660 | {
661 | "cell_type": "code",
662 | "execution_count": 0,
663 | "metadata": {
664 | "colab": {},
665 | "colab_type": "code",
666 | "id": "lCzEk-vPwKBK",
667 | "outputId": "03288ac5-1813-4a03-e6f7-4610ccfb2bf4"
668 | },
669 | "outputs": [
670 | {
671 | "data": {
672 | "image/png": "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\n",
673 | "text/plain": [
674 | ""
675 | ]
676 | },
677 | "metadata": {
678 | "needs_background": "light",
679 | "tags": []
680 | },
681 | "output_type": "display_data"
682 | }
683 | ],
684 | "source": [
685 | "learn.recorder.plot()"
686 | ]
687 | },
688 | {
689 | "cell_type": "code",
690 | "execution_count": 0,
691 | "metadata": {
692 | "colab": {},
693 | "colab_type": "code",
694 | "id": "xyZC6HMdwKBP",
695 | "scrolled": true
696 | },
697 | "outputs": [],
698 | "source": [
699 | "learn.fit_one_cycle(5, 3e-3, moms=(0.7,0.8))"
700 | ]
701 | },
702 | {
703 | "cell_type": "code",
704 | "execution_count": 0,
705 | "metadata": {
706 | "colab": {},
707 | "colab_type": "code",
708 | "id": "DmsVuYICgWea"
709 | },
710 | "outputs": [],
711 | "source": []
712 | }
713 | ],
714 | "metadata": {
715 | "accelerator": "GPU",
716 | "colab": {
717 | "collapsed_sections": [
718 | "LkXYHQhcwKAU",
719 | "b0_QNFnPwKBT"
720 | ],
721 | "include_colab_link": true,
722 | "name": "fastai-text-data-examples.ipynb",
723 | "provenance": [],
724 | "version": "0.3.2"
725 | },
726 | "kernelspec": {
727 | "display_name": "Python 3",
728 | "language": "python",
729 | "name": "python3"
730 | },
731 | "language_info": {
732 | "codemirror_mode": {
733 | "name": "ipython",
734 | "version": 3
735 | },
736 | "file_extension": ".py",
737 | "mimetype": "text/x-python",
738 | "name": "python",
739 | "nbconvert_exporter": "python",
740 | "pygments_lexer": "ipython3",
741 | "version": "3.6.7"
742 | }
743 | },
744 | "nbformat": 4,
745 | "nbformat_minor": 1
746 | }
747 |
--------------------------------------------------------------------------------
/mini-lessons/vision/mnist_wgan.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " "
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## GANs with mnist dataset\n",
15 | "We'll look at how to make a simple generator and discriminator network and try to generate images from the mnist dataset"
16 | ]
17 | },
18 | {
19 | "cell_type": "code",
20 | "execution_count": null,
21 | "metadata": {},
22 | "outputs": [],
23 | "source": [
24 | "%reload_ext autoreload\n",
25 | "%autoreload 2\n",
26 | "%matplotlib inline"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": null,
32 | "metadata": {},
33 | "outputs": [],
34 | "source": [
35 | "import fastai\n",
36 | "from fastai.vision import *\n",
37 | "from fastai.callbacks import *\n",
38 | "from fastai.vision.gan import *"
39 | ]
40 | },
41 | {
42 | "cell_type": "code",
43 | "execution_count": null,
44 | "metadata": {},
45 | "outputs": [],
46 | "source": [
47 | "path = untar_data(URLs.MNIST)"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": null,
53 | "metadata": {},
54 | "outputs": [],
55 | "source": [
56 | "path.ls()"
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": null,
62 | "metadata": {},
63 | "outputs": [],
64 | "source": [
65 | "bs,size=128,28"
66 | ]
67 | },
68 | {
69 | "cell_type": "code",
70 | "execution_count": null,
71 | "metadata": {},
72 | "outputs": [],
73 | "source": [
74 | "il = ImageList.from_folder(path, convert_mode='L')"
75 | ]
76 | },
77 | {
78 | "cell_type": "code",
79 | "execution_count": null,
80 | "metadata": {},
81 | "outputs": [],
82 | "source": [
83 | "defaults.cmap='binary'"
84 | ]
85 | },
86 | {
87 | "cell_type": "code",
88 | "execution_count": null,
89 | "metadata": {},
90 | "outputs": [],
91 | "source": [
92 | "sd = il.split_by_folder(train='training', valid='testing')"
93 | ]
94 | },
95 | {
96 | "cell_type": "code",
97 | "execution_count": null,
98 | "metadata": {},
99 | "outputs": [],
100 | "source": [
101 | "ll = sd.label_from_folder()"
102 | ]
103 | },
104 | {
105 | "cell_type": "code",
106 | "execution_count": null,
107 | "metadata": {},
108 | "outputs": [],
109 | "source": [
110 | "x,y = ll.train[0]"
111 | ]
112 | },
113 | {
114 | "cell_type": "code",
115 | "execution_count": null,
116 | "metadata": {},
117 | "outputs": [],
118 | "source": [
119 | "x.show()\n",
120 | "print(y,x.shape)"
121 | ]
122 | },
123 | {
124 | "cell_type": "markdown",
125 | "metadata": {},
126 | "source": [
127 | "Since these are numbers we don't want to apply any warping, flip or zoom augmentation as they will cease to look like numbers. We only apply some random padding"
128 | ]
129 | },
130 | {
131 | "cell_type": "code",
132 | "execution_count": null,
133 | "metadata": {},
134 | "outputs": [],
135 | "source": [
136 | "tfms = ([*rand_pad(padding=3, size=size, mode='zeros')], [])"
137 | ]
138 | },
139 | {
140 | "cell_type": "code",
141 | "execution_count": null,
142 | "metadata": {},
143 | "outputs": [],
144 | "source": [
145 | "ll.transform(tfms)\n",
146 | "data = ll.databunch(bs=bs).normalize()"
147 | ]
148 | },
149 | {
150 | "cell_type": "markdown",
151 | "metadata": {},
152 | "source": [
153 | "Always a good idea to look at these stats if you're not sure what format the image is in. "
154 | ]
155 | },
156 | {
157 | "cell_type": "code",
158 | "execution_count": null,
159 | "metadata": {},
160 | "outputs": [],
161 | "source": [
162 | "def get_stats(tensor): return tensor.mean(),tensor.std(),tensor.min(),tensor.max()"
163 | ]
164 | },
165 | {
166 | "cell_type": "code",
167 | "execution_count": null,
168 | "metadata": {},
169 | "outputs": [],
170 | "source": [
171 | "get_stats(data.train_ds[1][-1].data)"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": null,
177 | "metadata": {},
178 | "outputs": [],
179 | "source": [
180 | "def get_data(bs,size):\n",
181 | " return (GANItemList.from_folder(path, noise_sz=100,convert_mode='L')\n",
182 | " .split_none()\n",
183 | " .label_from_func(noop)\n",
184 | " .transform(tfms,size=size,tfm_y=True)\n",
185 | " .databunch(bs=bs).normalize(stats = [torch.tensor([0.5]), torch.tensor([0.5])],do_x=False,do_y=True))"
186 | ]
187 | },
188 | {
189 | "cell_type": "code",
190 | "execution_count": null,
191 | "metadata": {},
192 | "outputs": [],
193 | "source": [
194 | "data = get_data(bs,size)"
195 | ]
196 | },
197 | {
198 | "cell_type": "code",
199 | "execution_count": null,
200 | "metadata": {
201 | "scrolled": true
202 | },
203 | "outputs": [],
204 | "source": [
205 | "data.show_batch(2)"
206 | ]
207 | },
208 | {
209 | "cell_type": "markdown",
210 | "metadata": {},
211 | "source": [
212 | "We define some helper functions to get quickly get `conv_blocks` i.e layers with 2d convolutions,relu activation and batch normalization as we use them quite often and don't want to make mistakes"
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": null,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": [
221 | "def conv2d(ni,nf,kernel_size=4,stride=2,bn=True):\n",
222 | " layers = [nn.Conv2d(ni,nf,kernel_size=kernel_size,stride=stride,padding=1,bias=False),nn.LeakyReLU(0.2,True)]\n",
223 | " if bn: layers.append(nn.BatchNorm2d(nf))\n",
224 | " return nn.Sequential(*layers)"
225 | ]
226 | },
227 | {
228 | "cell_type": "markdown",
229 | "metadata": {},
230 | "source": [
231 | "`nn.ConvTranspose2d` is a deconvolution or a fractional convolution. Instead of downsampling (which is what is done with stride > 1 convolutions), we upsample (increase the grid size)"
232 | ]
233 | },
234 | {
235 | "cell_type": "code",
236 | "execution_count": null,
237 | "metadata": {},
238 | "outputs": [],
239 | "source": [
240 | "def convt2d(ni,nf,kernel_size=4,stride=2,padding=1,bn=True): \n",
241 | " layers = [nn.ConvTranspose2d(ni,nf,kernel_size=kernel_size,stride=stride,padding=1,bias=False),nn.ReLU(True)]\n",
242 | " if bn: layers.append(nn.BatchNorm2d(nf))\n",
243 | " return nn.Sequential(*layers)"
244 | ]
245 | },
246 | {
247 | "cell_type": "code",
248 | "execution_count": null,
249 | "metadata": {},
250 | "outputs": [],
251 | "source": [
252 | "from fastai.vision.gan import AvgFlatten"
253 | ]
254 | },
255 | {
256 | "cell_type": "code",
257 | "execution_count": null,
258 | "metadata": {},
259 | "outputs": [],
260 | "source": [
261 | "critic = nn.Sequential(conv2d(3, 8,bn=False), #14\n",
262 | " conv2d(8,8,kernel_size=3,stride=1),#7\n",
263 | " conv2d(8,16),#7\n",
264 | " conv2d(16, 32), #4\n",
265 | " nn.Conv2d(32,1,kernel_size=3,stride=1,padding=0,bias=False), #2\n",
266 | " AvgFlatten()) #make into vector"
267 | ]
268 | },
269 | {
270 | "cell_type": "code",
271 | "execution_count": null,
272 | "metadata": {},
273 | "outputs": [],
274 | "source": [
275 | "generator = nn.Sequential(convt2d(100,8,padding=0), #2\n",
276 | " convt2d(8,16), #4\n",
277 | " convt2d(16,32,stride=3), #12\n",
278 | " convt2d(32,16), #24\n",
279 | " convt2d(16,16,stride=1), #24\n",
280 | " nn.ConvTranspose2d(16, 3, kernel_size=4, stride=1, padding=1,bias=False), #24\n",
281 | " nn.Tanh())"
282 | ]
283 | },
284 | {
285 | "cell_type": "code",
286 | "execution_count": null,
287 | "metadata": {},
288 | "outputs": [],
289 | "source": [
290 | "learn = GANLearner.wgan(data, generator, critic, switch_eval=False,\n",
291 | " opt_func = partial(optim.Adam, betas = (0.,0.99)), wd=0.)"
292 | ]
293 | },
294 | {
295 | "cell_type": "code",
296 | "execution_count": null,
297 | "metadata": {
298 | "scrolled": true
299 | },
300 | "outputs": [],
301 | "source": [
302 | "learn.fit(10,1e-4)"
303 | ]
304 | },
305 | {
306 | "cell_type": "code",
307 | "execution_count": null,
308 | "metadata": {},
309 | "outputs": [],
310 | "source": [
311 | "bs,size=128,64\n",
312 | "data = get_data(bs,size)"
313 | ]
314 | },
315 | {
316 | "cell_type": "code",
317 | "execution_count": null,
318 | "metadata": {},
319 | "outputs": [],
320 | "source": [
321 | "generator = basic_generator(in_size=size,n_channels=3,n_features=64,n_extra_layers=1)\n",
322 | "critic = basic_critic(in_size=size,n_channels=3,n_features=64,n_extra_layers=1)"
323 | ]
324 | },
325 | {
326 | "cell_type": "code",
327 | "execution_count": null,
328 | "metadata": {},
329 | "outputs": [],
330 | "source": [
331 | "learn = GANLearner.wgan(data, generator, critic, switch_eval=False,\n",
332 | " opt_func = partial(optim.Adam, betas = (0.,0.99)), wd=0.)"
333 | ]
334 | },
335 | {
336 | "cell_type": "code",
337 | "execution_count": null,
338 | "metadata": {
339 | "scrolled": true
340 | },
341 | "outputs": [],
342 | "source": [
343 | "learn.fit(10,1e-4)"
344 | ]
345 | },
346 | {
347 | "cell_type": "code",
348 | "execution_count": null,
349 | "metadata": {},
350 | "outputs": [],
351 | "source": []
352 | }
353 | ],
354 | "metadata": {
355 | "kernelspec": {
356 | "display_name": "Python 3",
357 | "language": "python",
358 | "name": "python3"
359 | },
360 | "language_info": {
361 | "codemirror_mode": {
362 | "name": "ipython",
363 | "version": 3
364 | },
365 | "file_extension": ".py",
366 | "mimetype": "text/x-python",
367 | "name": "python",
368 | "nbconvert_exporter": "python",
369 | "pygments_lexer": "ipython3",
370 | "version": "3.6.7"
371 | }
372 | },
373 | "nbformat": 4,
374 | "nbformat_minor": 2
375 | }
376 |
--------------------------------------------------------------------------------