├── 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 | "\"Open" 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 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | "
labeltextis_valid
0negativeUn-bleeping-believable! Meg Ryan doesn't even ...False
1positiveThis is a extremely well-made film. The acting...False
2negativeEvery once in a long while a movie will come a...False
3positiveName just says it all. I watched this movie wi...False
4negativeThis movie succeeds at being one of the most u...False
\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 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | "
idxtext
0! ! ! ! ! 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
1/ 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
2series ! 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
3, 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 ! !
4! 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 !
" 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 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | "
epochtrain_lossvalid_lossaccuracytime
04.8422204.4031780.28182400:57
14.2875323.7655790.31442900:57
23.8254583.4231770.34596600:57
33.5452603.3277160.35773300:57
43.3529653.2452800.36336100:57
53.2264023.2105270.36698000:57
63.1255953.1812850.36983400:57
73.0461733.1671630.37208200:57
83.0017893.1647540.37213000:57
" 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 | "\"Open" 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 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | "
jaen
0ムーリエルは20歳になりました。Muiriel is 20 now.
1すぐに戻ります。I will be back soon.
2すぐに諦めて昼寝をするかも知れない。I may give up soon and just nap instead.
3愛してる。I love you.
4ログアウトするんじゃなかったよ。I shouldn't have logged off.
\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 | "\"Open" 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 | --------------------------------------------------------------------------------