Slide 1

Slide 1 text

Machine Learning with Python ʙ1ZUIPOͰػցֶशͷσϞΞϓϦΛ࡞Δʙ Yohei Munesada

Slide 2

Slide 2 text

 फఆ༸ฏ ΉͶͩ͞Α͏΁͍ (`T"$"%&.:50,:0ϝϯλʔ ϒϩάIUUQXXXZPIFJNOFU about me

Slide 3

Slide 3 text

 corse catalog 㾎 1ZUIPOͱ͸ 㾎 1ZUIPOجຊฤ 㾎 Ϟδϡʔϧͱύοέʔδ 㾎 8FCεΫϨΠϐϯά 㾎 8FCαʔόʔ 㾎 1ZUIPOͱػցֶश Basic Advanced

Slide 4

Slide 4 text

 a concept of the day ػցֶशͱ͍͑͹1ZUIPOͱݴΘΕΔͱ͜ΖΛମݧ͢Δ ػցֶशͷ࡞ۀεςοϓΛ1ZUIPOͰ࣮૷͢Δ ԋशΛ௨࣮ͯ͠૷ͯ͠ମݧ͢Δ

Slide 5

Slide 5 text

 today’s demo https://goo.gl/KMgK3e

Slide 6

Slide 6 text

 the contents ػցֶशͷ֓࿦ ػցֶशΛऔΓר͘1ZUIPOϥΠϒϥϦ 47.Λ༻͍ͨखॻ͖൑ఆΞϓϦΛ࡞Δ

Slide 7

Slide 7 text

 Machine Leaning Basic

Slide 8

Slide 8 text

 agenda ػցֶशͱ͸Կ͔ʁ ճؼͱ෼ྨ ڭࢣ͋Γͱڭࢣͳ͠ ػցֶशͷओͳͭͷछྨ ػցֶशͷεςοϓ

Slide 9

Slide 9 text

 machine learning is … ? ?

Slide 10

Slide 10 text

 machine learning is … ? େྔσʔλ͔ΒύλʔϯΛೝࣝ͢Δ ໌೔͕੖ΕΔ৚݅ͱ͸ʁ Πέϝϯʹೝఆ͞ΕΔύλʔϯͱ͸ʁ ໌೔ͷσΟζχʔϥϯυ͕ࠞΉ৚݅͸ʁ ύλʔϯΛ࢖ͬͯɺະ஌ͷσʔλΛ༧ଌ͢Δ ͋ͷಈ͖ɺ΋͠΍ෆ৹ऀͰ͸ɾɾɾʁ ࠓि຤ͷ͓ళ΁ͷདྷ٬਺͸ʁ དྷ݄ͷిྗ࢖༻ྔ͸ʁ

Slide 11

Slide 11 text

 ػցֶशͷϞσϧ͸ɺճؼ 3FHSFTTJPO ͱ෼ྨ $MBTTJpDBUJPO ʹେผ͞Ε·͢ ճؼ(Regression) ෼ྨ(Classification) ೖྗ͞Εͨσʔλ͔Β਺஋Λ༧ଌ͢ΔϞσϧɻ ྫɿϢʔβʔͷߪೖֹ༧ଌɺϢʔβʔͷεϚϗར༻࣌ؒ༧ଌ ೖྗ͞Εͨσʔλ͔Β෼ྨΛ༧ଌ͢ΔϞσϧɻ෼ྨث $MBTTJpFS ͱ΋ݺ͹ΕΔɻ ྫɿϢʔβʔ͕ߪೖ͢Δ͔൱͔ɺը૾ʹೣؚ͕·ΕΔ͔൱͔ɺखॻ͖਺஋ͷ஋͸Կ͔ʁ regression and classification

Slide 12

Slide 12 text

 ػցֶशͷϞσϧ͸ɺڭࢣ͋Γ 4VQFSWJTFE ͱڭࢣͳ͠ 6OTVQFSWJTFE ʹେผ͞Ε·͢ ڭࢣ͋Γ(Supervised) ڭࢣͳ͠(Unsupervised) ࣄલʹ༩͑ΒΕͨσʔλ τϨʔχϯάσʔλ Λ࢖ֶͬͯशΛߦ͍ɺͦΕΛ΋ͱʹ༧ଌ͢Δɻ ྫɿઢܗճؼɺϩδεςΟοΫճؼɺ47.ɺχϡʔϥϧωοτɺܾఆ໦ɺFUD ࣄલσʔλͳ͠ʹɺ༩͑ΒΕͨະ஌ͳσʔλ͔ΒԿΒ͔ͷຊ࣭తͳߏ଄Λಋ͖ग़͢ɻ ྫɿΫϥελϦϯάɺओ੒෼෼ੳɺFUD supervised and unsupervised

Slide 13

Slide 13 text

 ڭࢣ͋Γ Supervised ڭࢣͳ͠ Unsupervised ճؼ Regression A B ෼ྨ Classification C D 4 types of machine learning ଞʹ΋ڧԽֶश΍Ҩ఻తΞϧΰϦζϜ΋

Slide 14

Slide 14 text

 ref: ڧԽֶश(Reinforcement Learning) Ҩ఻తΞϧΰϦζϜ(Genetic Algorithm) http://yoheim.net/work/01_maze/ https://goo.gl/3gS3fq https://goo.gl/POq5el

Slide 15

Slide 15 text

 ػձֶश͸ҎԼͷεςοϓͰ࣮ߦ͠·͢ steps of machine learning ?

Slide 16

Slide 16 text

 ػձֶश͸ҎԼͷεςοϓͰ࣮ߦ͠·͢ σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ steps of machine learning

Slide 17

Slide 17 text

 for your information ˞Ҿ༻ɿӬా͞ΜߨٛࢿྉΑΓ

Slide 18

Slide 18 text

 for your information ˞Ҿ༻ɿӬా͞ΜߨٛࢿྉΑΓ

Slide 19

Slide 19 text

 for your information ˞Ҿ༻ɿӬా͞ΜߨٛࢿྉΑΓ

Slide 20

Slide 20 text

 re:agenda ػցֶशͱ͸Կ͔ʁ ճؼͱ෼ྨ ڭࢣ͋Γͱڭࢣͳ͠ ػցֶशͷओͳͭͷछྨ ػցֶशͷεςοϓ

Slide 21

Slide 21 text

 python libraries for ML

Slide 22

Slide 22 text

 main python libraries

Slide 23

Slide 23 text

 NumPy ߦྻ΍ϕΫτϧΛѻ͏͜ͱ͕Ͱ͖ɺ$ݴޠϨϕϧͰߴ଎ʹॲཧ͢Δ import numpy as np X = np.array([ [5,0,1], [1,6,0], [0,0,1] ]) X.shape X.T E = np.eye(X.shape[0]) X.dot(E)

Slide 24

Slide 24 text

 Matplotlib %ϓϩοτΛߦ͏ϥΠϒϥϦͰ͢ import numpy as np import matplotlib.pylab as plt x = np.linspace(-np.pi, np.pi, 200) plt.plot(x, np.sin(x)) plt.show()

Slide 25

Slide 25 text

 http://scikit-learn.org/

Slide 26

Slide 26 text

 hand-written digits recognition

Slide 27

Slide 27 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 28

Slide 28 text

 http://yann.lecun.com/exdb/mnist/

Slide 29

Slide 29 text

 samples

Slide 30

Slide 30 text

 download MNIST data ./*45σʔλ͸8FC͔Βऔಘ͢Δ͜ͱ͕Ͱ͖·͢ http://yann.lecun.com/exdb/mnist/ data_mnist train-images-idx3-… train-labels-idx1-… …

Slide 31

Slide 31 text

 original format

Slide 32

Slide 32 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 33

Slide 33 text

 ڭࢣ͋Γ Supervised ڭࢣͳ͠ Unsupervised ճؼ Regression A B ෼ྨ Classification C D re: 4 types of machine learning

Slide 34

Slide 34 text

 ڭࢣ͋Γ Supervised ڭࢣͳ͠ Unsupervised ճؼ Regression A B ෼ྨ Classification C D re: 4 types of machine learning

Slide 35

Slide 35 text

 Support Vector Machine ڭࢣ͋Γɺ෼ྨ໰୊Λղ͘ΞϧΰϦζϜͰ͢ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋

Slide 36

Slide 36 text

 Support Vector Machine ڭࢣ͋Γɺ෼ྨ໰୊Λղ͘ΞϧΰϦζϜͰ͢ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋

Slide 37

Slide 37 text

 Support Vector Machine ڭࢣ͋Γɺ෼ྨ໰୊Λղ͘ΞϧΰϦζϜͰ͢ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋

Slide 38

Slide 38 text

 Support Vector Machine ڭࢣ͋Γɺ෼ྨ໰୊Λղ͘ΞϧΰϦζϜͰ͢ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ˚ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ ̋ Ϛʔδϯͷ࠷େԽ

Slide 39

Slide 39 text

 Wanna dive into deep ? https://goo.gl/JE8Vvx ػցֶशͷجૅʢ਺ࣜฤʣ https://goo.gl/ATGxjM αϙʔτϕΫλʔϚγϯ

Slide 40

Slide 40 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 41

Slide 41 text

 feature is ػցֶशͷΞϧΰϦζϜʹೖྗ͢Δಛ௃ྔ GFBUVSF Ͱ͢ ?

Slide 42

Slide 42 text

 feature is ػցֶशͷΞϧΰϦζϜʹೖྗ͢Δಛ௃ྔ GFBUVSF Ͱ͢ Ϟς཰ ϕʔε஋ ਎௕ ϧοΫε ੑ֨ + = + + ൑ఆ݁Ռ ಛ௃ ಛ௃ ಛ௃

Slide 43

Slide 43 text

 the features of MNIST ./*45ͷը૾ͷಛ௃ྔͱ͸ԿͰ͠ΐ͏͔ʁ                                                                                                                                                           ʜ ϐΫηϧ͕ͦΕͧΕಛ௃ྔʢίʣ

Slide 44

Slide 44 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 45

Slide 45 text

 data pre-processing ./*45σʔλ͔ΒɺϞσϧʹಡΈࠐ·ͤΔσʔλΛ࡞Γ·͢ $47ܗࣜʹม׵͢Δ αϯϓϧը૾Λग़ྗͯ͠ΈΔʢՃ޻݁Ռͷ֬ೝʣ

Slide 46

Slide 46 text

 convert to csv format ./*45ͷόΠφϦʔσʔλΛ$47ܗࣜʹม׵͠·͢ ͕ɺͦͷલʹʜ

Slide 47

Slide 47 text

 binary data with Python όΠφϦσʔλΛTUSVDUϞδϡʔϧ ඪ४ϥΠϒϥϦ Ͱѻ͍·͢ https://docs.python.org/ja/3/library/struct.html

Slide 48

Slide 48 text

 binary data with Python όΠφϦσʔλΛTUSVDUϞδϡʔϧ ඪ४ϥΠϒϥϦ Ͱѻ͍·͢ import struct f = open(“file.binary", "rb") num1, num2 = struct.unpack(">II", f.read(8))

Slide 49

Slide 49 text

 big-endian and little-endian (ࢀߟ) ΤσΟΞϯʹ͍ͭͯɿhttp://www.ertl.jp/~takayuki/readings/info/no05.html 100

Slide 50

Slide 50 text

 convert to csv format ./*45ͷόΠφϦʔσʔλΛ$47ܗࣜʹม׵͠·͢

Slide 51

Slide 51 text

 ˞ϥϕϧσʔλ

Slide 52

Slide 52 text

 import struct import gzip # Read MNIST `label`. fpath = "./data_mnist/train-labels-idx1-ubyte.gz" with gzip.open(fpath, "rb") as f: magic_number, img_count = struct.unpack(">II", f.read(8)) labels = [] for i in range(img_count): label = str(struct.unpack("B", f.read(1))[0]) labels.append(label) # Write as csv. outpath = './csv/train-labels.csv' with open(outpath, "w") as f: f.write("\n".join(labels)) ˞ϥϕϧσʔλ

Slide 53

Slide 53 text

 ˞ը૾σʔλ

Slide 54

Slide 54 text

 ˞ը૾σʔλ import struct import gzip # Read MNIST `images`. fpath = "./data_mnist/train-images-idx3-ubyte.gz" with gzip.open(fpath, "rb") as f: _, img_count = struct.unpack(">II", f.read(8)) rows, cols = struct.unpack(">II", f.read(8)) images = [] for i in range(img_count): binary = f.read(rows * cols) images.append(",".join([str(b) for b in binary])) # Write as csv. outpath = './csv/train-images.csv' with open(outpath, "w") as f: f.write("\n".join(images))

Slide 55

Slide 55 text

 output as images Ұ෦Λը૾ʹग़ྗͯ͠$47݁Ռ͕ਖ਼͍͜͠ͱΛ֬ೝ͠·͢ with open("./csv/train-images.csv") as f: images = f.read().split("\n") for i, image in enumerate(images[:10]): with open("./image/%d.pgm" % i, "w") as f: s = "P2 28 28 255\n" s += " ".join(image.split(",")) f.write(s)

Slide 56

Slide 56 text

 output as images Ұ෦Λը૾ʹग़ྗͯ͠$47݁Ռ͕ਖ਼͍͜͠ͱΛ֬ೝ͠·͢

Slide 57

Slide 57 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 58

Slide 58 text

 use Support Vector Machine ͦΕͰ͸47.ͰύλʔϯೝࣝΛߦ͍͍ͨͱࢥ͍·͢ from sklearn import svm # Load training data. with open("./csv/train-images.csv") as f: images = f.read().split("\n")[:500] with open("./csv/train-labels.csv") as f: labels = f.read().split("\n")[:500] # Convert data. images = [[int(i)/256 for i in image.split(",")] for image in images] labels = [int(l) for l in labels] # Use SVM. clf = svm.SVC() clf.fit(images, labels)

Slide 59

Slide 59 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 60

Slide 60 text

 evaluate the model ςετσʔλΛ༻ֶ͍ͯशͨ݁͠Ռ͔Β༧ଌΛߦ͍ɺਫ਼౓ΛධՁ͠·͢ from sklearn import metrics test_images = #ಡΈࠐΈॲཧ͸লུʢࠓճ͸500݅ಡΈࠐΉʣ# test_labels = #ಡΈࠐΈॲཧ͸লུʢࠓճ͸500݅ಡΈࠐΉʣ# # Predict. predict = clf.predict(test_images) # Show results. ac_score = metrics.accuracy_score(test_labels, predict) print("Accuracy:", ac_score) cl_report = metrics.classification_report(test_labels, predict) print(cl_report)

Slide 61

Slide 61 text

 ςετσʔλΛ༻ֶ͍ͯशͨ݁͠Ռ͔Β༧ଌΛߦ͍ɺਫ਼౓ΛධՁ͠·͢ evaluate the model ద߹཰ͱ࠶ݱ཰ɿIUUQEIBUFOBOFKQ;FMMJKQ

Slide 62

Slide 62 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 63

Slide 63 text

 Ͳ͏΍ͬͯվળ͠·͔͢ʁ how to improve the model

Slide 64

Slide 64 text

 τϨʔχϯάσʔλΛ૿΍͢ ಛ௃Λ૿΍͢ ಛ௃ΛݮΒ͢ ਖ਼ଇԽ߲ͷӨڹ౓ʢЕʣΛ૿΍͢ ਖ਼ଇԽ߲ͷӨڹ౓ʢЕʣΛݮΒ͢ σʔλͷਖ਼نԽ how to improve the model

Slide 65

Slide 65 text

 τϨʔχϯάσʔλΛ૿΍͢ ಛ௃Λ૿΍͢ ಛ௃ΛݮΒ͢ ਖ਼ଇԽ߲ͷӨڹ౓ʢЕʣΛ૿΍͢ ਖ਼ଇԽ߲ͷӨڹ౓ʢЕʣΛݮΒ͢ σʔλͷਖ਼نԽ how to improve the model

Slide 66

Slide 66 text

 ֶशσʔλΛˠ ݅ʹ૿΍͠·͢ from sklearn import svm # Load training data. with open("./csv/train-images.csv") as f: images = f.read().split("\n")[:5000] with open("./csv/train-labels.csv") as f: labels = f.read().split("\n")[:5000] # Convert data. images = [[int(i)/256 for i in image.split(",")] for image in images] labels = [int(l) for l in labels] # Use SVM. clf = svm.SVC() clf.fit(images, labels) how to improve the model

Slide 67

Slide 67 text

 evaluate the training result ֶशσʔλΛˠ ݅ʹ૿΍͢ͱɺਫ਼౓͕ˠʹվળ͠·ͨ͠

Slide 68

Slide 68 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 69

Slide 69 text

 ֶश݁ՌΛอଘ͠ɺͷͪʹ8FCαʔόʔ͔Βར༻Ͱ͖ΔΑ͏ʹ͠·͢ save the training result # Save the training result. from sklearn.externals import joblib joblib.dump(clf, "./result/svm.pkl") result svm.pkl

Slide 70

Slide 70 text

 agenda σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ

Slide 71

Slide 71 text

 ઌ΄Ͳอଘֶͨ͠श݁ՌΛɺผͷϓϩάϥϜ͔Βར༻͠·͢ use the model from sklearn.externals import joblib # Load the training result. pklfile = path.join("result", "svm.pkl") clf = joblib.load(pklfile) # Predict. predict = clf.predict([data]) number = str(predict.tolist()[0])

Slide 72

Slide 72 text

 σʔλΛೖखͯ͠ཧղ͢Δ ΞϧΰϦζϜΛܾΊΔ ಛ௃ྔΛܾΊΔ σʔλͷΫϨϯδϯά੔ܗΛ͢Δ ֶश͢Δ ϞσϧΛධՁ͢Δ ϞσϧΛվળ͢Δ ֶश݁ՌΛอଘ͢Δ 8FCαʔόʔ͔Βར༻͢Δ re:agenda

Slide 73

Slide 73 text

 2nd demo app खॻ͖਺஋൑ఆΞϓϦΛ࡞Ζ͏

Slide 74

Slide 74 text

 today’s demo https://goo.gl/KMgK3e

Slide 75

Slide 75 text

 how it works 'MBTLΞϓϦέʔγϣϯ͔Βอଘֶͨ͠श݁ՌΛར༻͠·͢ http://localhost:5000 index.html /api/judge  ?data=0,0,255,86,0,0,255,10,… svm.pkl judge!! “3”

Slide 76

Slide 76 text

 how to create ϨϙδτϦΛΫϩʔϯ͢Δ ϥΠϒϥϦҰཡΛಡΈࠐΉ ىಈͯ͠ΈΔ جૅ՝୊Λ࣮૷͢Δ ಈ࡞ςετΛ͢Δ https://github.com/yoheimune-python-lecture/hand-written-digit-recognition

Slide 77

Slide 77 text

 Finish !

Slide 78

Slide 78 text

 summary

Slide 79

Slide 79 text

 summary 1ZUIPOºػցֶशͷମݧΛ͠·ͨ͠ 1ZUIPOͷʮ਺ߦͰ΍Γ͍ͨ͜ͱ͕Ͱ͖Δʯ΋ମݧͰ͖·͔ͨ͠ʁ ίʔυ͸ॻ͔ͳ͖Ό਎ʹ͔ͭͳ͍ʂ ָ͍͠1ZUIPOϥΠϑΛʂ

Slide 80

Slide 80 text

https://www.coursera.org/learn/machine-learning

Slide 81

Slide 81 text

 next step https://goo.gl/ccYxtS https://goo.gl/POq5el

Slide 82

Slide 82 text

 next step https://goo.gl/EXcphV https://goo.gl/51viVt

Slide 83

Slide 83 text

 https://goo.gl/JE8Vvx next step

Slide 84

Slide 84 text

 next step https://goo.gl/J6jXhp

Slide 85

Slide 85 text

Thank you http://www.yoheim.net @yoheiMune IUUQTqJDLSQN[N2,