クックパッドの機械学習基盤 2018 / Machine Learning Platform at Cookpad ~ 2018 ~

クックパッドの機械学習基盤 2018 / Machine Learning Platform at Cookpad ~ 2018 ~

7dc8611c26c3ca62c551109c65d04270?s=128

Yuichiro Someya

February 21, 2018
Tweet

Transcript

  1. ΫοΫύουͷ
 ػցֶशج൫ ΫοΫύουגࣜձࣾછ୩༔Ұ࿠ 1Z%BUB5PLZP

  2. ࣗݾ঺հ  છ୩༔Ұ࿠<:VJDIJSP4PNFZB>  ΫοΫύουגࣜձࣾݚڀ։ൃ෦
 ϦαʔνΤϯδχΞ೥݄d  ʰػցֶशʹඞཁͳج൫Λ
 "84্ʹߏங͢Δʱ UXJUUFSDPN!BZFNPT@Z

    HJUIVCDPNBZFNPT IUUQTXXXBZFNPTNF
  3. None
  4. Ϩγϐ਺ɿສ඼Ҏ্ ࠃ಺ͷ݄ؒར༻ऀ਺ɿ໿ສਓ

  5. ରԠݴޠɿݴޠϲࠃ ւ֎ͷ݄ؒར༻ऀ਺ɿສਓҎ্

  6. τϐοΫ  ΫοΫύουݚڀ։ൃ෦ͷൃ଍͔Βࠓ·ͰͷऔΓ૊Έ  ػցֶशνʔϜͷ๊͑Δ՝୊ϞσϧͷσϓϩΠ  ϞσϧΛσϓϩΠ͢Δҝʹඞཁͳ͜ͱ  ϞσϧσϓϩΠͷࣗಈԽ΁޲͚ͯ

  7. ΫοΫύουͷ
 ػցֶशج൫

  8. എܠΫοΫύουݚڀ։ൃ෦  ೥݄ʹൃ଍ ࢲ͕഑ଐ͞Εͨͷ΋ಉ࣌ظ   ౰࣌͸໊ͷϝϯόʔ  ೥݄ݱࡏ͸ࠃ಺ʹ໊ ւ֎ʹ໊

  9. ྉཧ͖Ζ͘ ৞ΈࠐΈχϡʔϥϧωοτϫʔΫ ʹΑΔྉཧը૾ͷࣗಈೝࣝ εϚʔτϑΥϯͷࣸਅͷ಺ɺ ྉཧࣸਅΛࣗಈతʹऩूه࿥

  10. ྉཧ͖Ζ͘ ສਓҎ্ͷϢʔβʔʹΑΓར༻ ສຕҎ্ͷྉཧࣸਅ

  11. Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ ը૾෼ੳʹΑΔ Ϩγϐͷ෼ྨ \$MBTT^ ϑΟʔυόοΫͷ ࣗಈλά෇͚ Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ

  12. Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ ը૾෼ੳʹΑΔ Ϩγϐͷ෼ྨ \$MBTT^ ϑΟʔυόοΫͷ ࣗಈλά෇͚ ʙਓ Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ

  13. Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ ը૾෼ੳʹΑΔ Ϩγϐͷ෼ྨ \$MBTT^ ϑΟʔυόοΫͷ ࣗಈλά෇͚ ʙਓ Ϩγϐࡐྉ໊ͷ ࣗಈਖ਼نԽ

    IUUQUFDIMJGFDPPLQBEDPN
  14. ਂ૚ֶशϞσϧͷߴ଎ͳ
 ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

  15. ਂ૚ֶशϞσϧͷߴ଎ͳ
 ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

  16. ਂ૚ֶशϞσϧͷߴ଎ͳ
 ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

  17. ਂ૚ֶशϞσϧͷߴ଎ͳ
 ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

  18. ೥݄౰࣌  (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ  ʙिؒ  ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ
 ΠϯελϯεΛ࡞Δʁ  71$

    4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇ ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେม  %FFQ-FBSOJOH".*  ͸΋͏ͪΐͬͱະདྷͷ࿩ IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT
  19. ೥݄౰࣌  (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ  ʙिؒ  ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ
 ΠϯελϯεΛ࡞Δʁ  71$

    4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇ ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେม  %FFQ-FBSOJOH".*  ͸΋͏ͪΐͬͱະདྷͷ࿩ IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT
  20. ౳ ιϑτ΢ΣΞɺϛυϧ΢ΣΞͷ
 Πϯετʔϧͱઃఆ ίʔυԽͯ͠όʔδϣϯ؅ཧ εφοϓγϣοτ

  21. ౳ ιϑτ΢ΣΞɺϛυϧ΢ΣΞͷ
 Πϯετʔϧͱઃఆ ίʔυԽͯ͠όʔδϣϯ؅ཧ εφοϓγϣοτ ߏ੒؅ཧπʔϧͱεφοϓγϣοτʹΑΓɺ
 OWJEJBESJWFS $6%"ͳͲڞ௨ͯ͠ར༻͞ΕΔ
 ιϑτ΢ΣΞ͸தԝूݖతʹίʔυͰ؅ཧ

  22.  $6%" DV%//  $6%" DV%//  %FFQ-FBSOJOH".*+BO
 FUD DSFBUFXPSLCFODI

    TMBDL@VJE6  DPNNBOEDSFBUFXPSLCFODI 0VUHPJOH8FCIPPLT MBNCEB*OWPLF
  23.  $6%" DV%//  $6%" DV%//  %FFQ-FBSOJOH".*+BO
 FUD FD3VO*OTUBODFT

     71$ 4VCOFU /BNFλά౳
 ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ  ΠϯελϯεʹATMBDL@VJEAΛ
 λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ *ODPNJOH8FCIPPLT TTIBZFNPTXPSLCFODIEOTDPNQBOZ خ͍͠
  24.  $6%" DV%//  $6%" DV%//  %FFQ-FBSOJOH".*+BO
 FUD FD3VO*OTUBODFT

     71$ 4VCOFU /BNFλά౳
 ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ  ΠϯελϯεʹATMBDL@VJEAΛ
 λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ *ODPNJOH8FCIPPLT خ͍͠ TTIBZFNPTXPSLCFODIEOTDPNQBOZ MJTU<\NZcSVOOJOH^>JOTUBODFT<RVFSZ> -JTUFYJTUJOHJOTUBODFT TUBSU*/45/"$&@/".& 4UBSU&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU TUPQ*/45/"$&@/".& 4UPQ&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU DSFBUFXPSLCFODI803,#&/5)@5:1&<803,#&/$)@/".&> $SFBUFOFX&$XPSLCFODIXJUITQFDJpFEUZQF ".*  UFSNJOBUF*/45"/$&@/".& 5FSNJOBUF&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU MJTUXPSLCFODIUZQFT -JTU&$XPSLCFODIUZQFT ".* FYJTUJOHVOEFSSBOEEBDDPVOU
  25.  $6%" DV%//  $6%" DV%//  %FFQ-FBSOJOH".*+BO
 FUD FD3VO*OTUBODFT

     71$ 4VCOFU /BNFλά౳
 ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ  ΠϯελϯεʹATMBDL@VJEAΛ
 λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ *ODPNJOH8FCIPPLT خ͍͠ TTIBZFNPTXPSLCFODIEOTDPNQBOZ MJTU<\NZcSVOOJOH^>JOTUBODFT<RVFSZ> -JTUFYJTUJOHJOTUBODFT TUBSU*/45/"$&@/".& 4UBSU&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU TUPQ*/45/"$&@/".& 4UPQ&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU DSFBUFXPSLCFODI803,#&/5)@5:1&<803,#&/$)@/".&> $SFBUFOFX&$XPSLCFODIXJUITQFDJpFEUZQF ".*  UFSNJOBUF*/45"/$&@/".& 5FSNJOBUF&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU MJTUXPSLCFODIUZQFT -JTU&$XPSLCFODIUZQFT ".* FYJTUJOHVOEFSSBOEEBDDPVOU &$Πϯελϯεʹ·ͭΘΔҰ࿈ͷૢ࡞Λ
 ڞ௨Խ͠ɺ$IBU#PUܦ༝Ͱఏڙ
 ࣮ݧ໨తͰ࢖͏Πϯελϯεͷઃఆ஋͸΄΅ڞ௨Խग़དྷΔ
  26. None
  27. ೥݄౰࣌  (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ  ʙिؒ  ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ
 ΠϯελϯεΛ࡞Δʁ  71$

    4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇ ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେมղܾ  %FFQ-FBSOJOH".*  ͸΋͏ͪΐͬͱະདྷͷ࿩ IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT
  28. ΫοΫύουͷ
 ػցֶशج൫ ΄΅ ׬ ͜͜·ͰͰ෼

  29. ΫοΫύουͷ
 ػցֶशج൫

  30. ΫοΫύουݚڀ։ൃ෦  ೥݄ʹൃ଍ ࢲ͕഑ଐ͞Εͨͷ΋ಉ࣌ظ   ౰࣌͸໊ͷϝϯόʔ  ೥݄ݱࡏ͸ࠃ಺ʹ໊ ւ֎ʹ໊

  31. ΞϓϦ
 ࣾ಺γεςϜ౳ Ϟσϧ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷ ςετʗ؂ࢹ

    લॲཧ Ϟσϧ࣮૷ σϓϩΠ ೥·Ͱ
  32. Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷

    ςετʗ؂ࢹ લॲཧ σϓϩΠ ϘτϧωοΫ ݱࡏ
  33. Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷

    ςετʗ؂ࢹ લॲཧ σϓϩΠ ϘτϧωοΫ Ϟσϧ։ൃऀ͕૿͑ɺ
 ϞσϧͷσϓϩΠ࡞ۀ͕ϘτϧωοΫʹ
  34. ػցֶशϞσϧͷσϓϩΠ  ͱ͸  αʔόʔ΁ͷຒΊࠐΈʗύοέʔδԽʗ"1*Խʁ  গͳ͘ͱ΋ࠓճ͸ είʔϓ֎ͳࣄ  ϞσϧͷपΓʹϏδωεϩδοΫΛ࣮૷͢Δࣄ


    ྫ౤ߘΛεύϜ൑ఆͨ͠Β%#ʹద੾ͳϑϥάΛॻ͖ࠐΉ ͜͜·Ͱ͕σϓϩΠ͞ΕͨϞσϧͷ੹຿
  35. ػցֶशϞσϧͷσϓϩΠ  ͱ͸  αʔόʔ΁ͷຒΊࠐΈʗύοέʔδԽʗ"1*Խʁ  গͳ͘ͱ΋ࠓճ͸ είʔϓ֎ͳࣄ  ϞσϧͷपΓʹϏδωεϩδοΫΛ࣮૷͢Δࣄ


    ྫ౤ߘΛεύϜ൑ఆͨ͠Β%#ʹద੾ͳϑϥάΛॻ͖ࠐΉ ͜͜·Ͱ͕σϓϩΠ͞ΕͨϞσϧͷ੹຿
  36. αʔόʔʗΞϓϦʹ૊ΈࠐΉ  ͍͍ͱ͜Ζ  Ϟσϧݺͼग़͠ݩͷ௨৴Φʔόʔϔου౳͕ආ͚ΒΕΔ  Α͘ͳ͍ͱ͜Ζ  ΞϓϦέʔγϣϯίʔυΛ͍͡Δඞཁ͕͋Δ 

    1ZUIPO؀ڥʹݶΒΕΔPSม׵͢Δඞཁ͕͋Δ
 Ұํ1Z$BMMͱ͍͏ͷ΋͋Δ    άϧʔίʔυ͕ॏෳ͢Δ
 ͔͠΋݁ߏάϧʔ͕෼ް͔ͬͨΓ͢Δ IUUQTHJUIVCDPNNSLOQZDBMMSC
  37. 1ZUIPOQBDLBHFʹ͢Δ  άϧʔ෦෼ΛؚΊͯ1ZUIPOQBDLBHFԽͯ͠ଞॴͰར༻Ͱ͖Δ Α͏ʹ͢Δ  ެ։Ͱ͖ͳ΋ͷʹ͍ͭͯ͸1Z1*$MPVE  ͳͲΛࣾ಺ʹ
 ཱͯΔͱ͍͏ख͕͋Δ IUUQTHJUIVCDPNTUFWFBSDQZQJDMPVE

  38. 1ZUIPOQBDLBHFʹ͢Δ  ͍͍ͱ͜Ζ  άϧʔίʔυͷॏෳ͕ආ͚ΒΕΔ  Α͘ͳ͍ͱ͜Ζ  ґવ1ZUIPO؀ڥʹݶΒΕΔ 

    ख͕͔͔ؒΔ  //ϑϨʔϜϫʔΫͷ஌ࣝɺ1ZUIPOͷQBDLBHJOHʹؔ͢Δ஌͕ࣝඞཁʹ ͳΔ ୭͕΍Δͷ͔໰୊ IUUQTHJUIVCDPNTUFWFBSDQZQJDMPVE
  39. "1*Խ͢Δ  Ϟσϧ୯ମΛ"1*Խ  ϞσϧΛಡΈࠐΜͰɺ֎෦ϦΫΤετʹԠͯ͡ϞσϧΛ
 ݺͼग़͢ബ͘খ͞ͳ"1*Λ࣮૷͢Δ NJDSPTFSWJDF   पลͷϩδοΫ

    ʰϞσϧ͕εύϜ൑ఆͨ͠Β%#ʹϑϥάΛ ཱͯΔʱ ͸֎෦Ͱ࣮૷
  40. "1*Խ͢Δ  ͍͍ͱ͜Ζ  Ϟσϧ࣮૷ͱΞϓϦέʔγϣϯ࣮૷Λ্ख͘੾Γ཭ͤΔ
 ։ൃऀ΋্ख͘෼͚ΒΕΔ  ΞϓϦέʔγϣϯ͸1ZUIPOͰͳͯ͘΋Α͍ NJDSPTFSWJDF 

     Α͘ͳ͍ͱ͜Ζ  ख͕͔͔ؒΔ
  41. "1*Խ͢Δ  ͍͍ͱ͜Ζ  Ϟσϧ࣮૷ͱΞϓϦέʔγϣϯ࣮૷Λ্ख͘੾Γ཭ͤΔ
 ։ൃऀ΋্ख͘෼͚ΒΕΔ  ΞϓϦέʔγϣϯ͸1ZUIPOͰͳͯ͘΋Α͍ NJDSPTFSWJDF 

     Α͘ͳ͍ͱ͜Ζ  ख͕͔͔ؒΔ
  42. "1*Խʹඞཁͳ΋ͷ Ϟσϧ ͷEVNQ  NPEFM\QC I ^ "1* BQQQZ 


    )551 T &OEQPJOU QSFEJDU JOGPͱ͔ 
 ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ ࡞ۀ طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ
 -#ɺϞχλϦϯάɺ%/4౳ʑ ࣮ߦ؀ڥ %PDLFSpMF
  43. Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷

    ςετʗ؂ࢹ લॲཧ σϓϩΠ ϘτϧωοΫ
  44. σϓϩΠ Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ

    όον࣮૷ ςετʗ؂ࢹ લॲཧ ϞσϧΛσϓϩΠ͢ΔਓΛ૿΍͢
  45. "1*Խʹඞཁͳ΋ͷ Ϟσϧ ͷEVNQ  NPEFM\QC I ^ "1* BQQQZ 


    )551 T &OEQPJOU QSFEJDU JOGPͱ͔ 
 ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ ࡞ۀ طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ
 -#ɺϞχλϦϯάɺ%/4౳ʑ ࣮ߦ؀ڥ %PDLFSpMF
  46. "1*Խʹඞཁͳ΋ͷ Ϟσϧ ͷEVNQ  NPEFM\QC I ^ "1* BQQQZ 


    )551 T &OEQPJOU QSFEJDU JOGPͱ͔ 
 ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ ࡞ۀ طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ
 -#ɺϞχλϦϯάɺ%/4౳ʑ ࣮ߦ؀ڥ %PDLFSpMF ػցֶशͱͷυϝΠϯڞ༗౓ େ খ
  47. "1*Խʹඞཁͳ΋ͷ Ϟσϧ ͷEVNQ  NPEFM\QC I ^ "1* BQQQZ 


    )551 T &OEQPJOU QSFEJDU JOGPͱ͔ 
 ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ ࡞ۀ طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ
 -#ɺϞχλϦϯάɺ%/4౳ʑ ࣮ߦ؀ڥ %PDLFSpMF ػցֶशͱͷυϝΠϯڞ༗౓ େ খ 3%ଆͰϋϯυϧ͍ͨ͠ൣғ ػցֶशͱڞ༗͢ΔυϝΠϯ͕େ͖͍
  48. σϓϩΠ Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ

    όον࣮૷ ςετʗ؂ࢹ લॲཧ ϞσϧΛσϓϩΠ͢ΔਓΛ૿΍͢
  49. Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷

    ςετʗ؂ࢹ લॲཧ σϓϩΠ Ϟσϧ࣮૷ऀ͕ࣗ෼ͰσϓϩΠ͢Δ
  50. "1*Խʹඞཁͳ΋ͷ Ϟσϧ ͷEVNQ  NPEFM\QC I ^ "1* BQQQZ 


    )551 T &OEQPJOU QSFEJDU JOGPͱ͔ 
 ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ ࡞ۀ طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ
 -#ɺϞχλϦϯάɺ%/4౳ʑ ࣮ߦ؀ڥ %PDLFSpMF ػցֶशͱͷυϝΠϯڞ༗౓ େ খ
  51. ͱ͸͍͑  "1*࣮૷ͱ͔%PDLFSOJ[Fͱ͔΍ͬͨ͜ͱແ͍͠ʜ  ͜Ε͸؀ڥʹΑΔ͕ ଞͷ࡞ۀ΋ͳΜ͔ͩΜͩ৭ʑൃੜ͢Δ  σϓϩΠ+PCͷఆٛ SVOEFDL KFOLJOT

      %PDLFSJNBHFΛϏϧυͯࣾ͠಺ϨϙδτϦʹొ࿥  Ͳ͏ʹָ͔ʹ΍Γ͍ͨ
  52. ͜͜·Ͱ·ͱΊ  Ϟσϧ։ൃऀ͕૿͖͑ͯͨ݁ՌɺϞσϧͷσϓϩΠͱ͍͏
 ϘτϧωοΫ͕ݟ͖͑ͯͨ  "1*Խ·ͰΛ3%ଆͰ୲౰͢Δͷ΋ͪΐͬͱݫ͍͠  Ͳ͏͢Ε͹ʜ

  53. ϚωʔδυͳιϦϡʔγϣϯ  ਂ૚ֶशϞσϧͷֶश ࠓճ͸ແࢹ ʗσϓϩΠΛαϙʔτ͢Δ.-BB4  (PPHMF$MPVE.BDIJOF-FBSOJOH&OHJOF  "NB[PO4BHF.BLFS 

    'MPZE)VC
 FUD
  54. .-BB4ͷ σϓϩΠख๏ͷ ղ๤
 ʹΑΓɺϞσϧͷσϓϩΠͷצॴΛ೺Ѳ͢Δ

  55. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF 'MPZE)VC "NB[PO 4BHF.BLFS IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

  56. .PEFM7FSTJPO 3VOUJNF 6QMPBEANPEFMQCAXJUI
 *0TJHOBUVSFT 1045W\QBSFOUQSPKFDUT ^NPEFMT \ EFQMPZNFOU6SJHTQBUIUPNPEFM  SVOUJNF7FSTJPO

     BVUP4DBMJOH ^   ࢀর  1045W\OBNFQSPKFDUT ^QSFEJDU (PPHMF$MPVE.-&OHJOFʹΑΔσϓϩΠͷਤ $SFBUF JOQVUT PVUQVUT JOQVUT PVUQVUT
  57. .PEFM7FSTJPO 3VOUJNF 6QMPBEANPEFMQCAXJUI
 *0TJHOBUVSFT 1045W\QBSFOUQSPKFDUT ^NPEFMT \ EFQMPZNFOU6SJHTQBUIUPNPEFM  SVOUJNF7FSTJPO

     BVUP4DBMJOH ^   ࢀর  1045W\OBNFQSPKFDUT ^QSFEJDU (PPHMF$MPVE.-&OHJOFʹΑΔσϓϩΠͷਤ $SFBUF JOQVUT PVUQVUT JOQVUT PVUQVUT IUUQTDMPVEHPPHMFDPNNMFOHJOFEPDTSVOUJNFWFSTJPOMJTU
  58. .PEFM7FSTJPO 3VOUJNF 6QMPBEANPEFMQCAXJUI
 *0TJHOBUVSFT 1045W\QBSFOUQSPKFDUT ^NPEFMT \ EFQMPZNFOU6SJHTQBUIUPNPEFM  SVOUJNF7FSTJPO

     BVUP4DBMJOH ^   ࢀর  1045W\OBNFQSPKFDUT ^QSFEJDU (PPHMF$MPVE.-ʹΑΔσϓϩΠͷਤ $SFBUF JOQVUT PVUQVUT JOQVUT PVUQVUT  "1*ͷ࣮ମ͸$MPVE.-೚ͤ  A4JHOBUVSF%FGAΛར༻ͯ͠JOQVUPVUQVUUFOTPSΛ
 ಛఆ͢Δख๏Λऔ͍ͬͯΔ  ༧Ί༻ҙ͞Ε࣮ͨߦ؀ڥΛࢦఆͯ͠σϓϩΠ  %PDLFSJNBHF͕ෆཁ
  59. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λ ಛఆՄೳʹ͢Δ 'MPZE)VC "NB[PO 4BHF.BLFS IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  60. 'MPZE)VCʹΑΔσϓϩΠͷਤ SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF %BUBTFU NPVOUBCMFGPMEFST 1SFWJPVTUSBJOJOHKPCT &OEQPJOU BQQQZ import os from

    flask import Flask, send_file, request from werkzeug.exceptions import BadRequest from werkzeug.utils import secure_filename from evaluate import ffwd_to_img ALLOWED_EXTENSIONS = set(['jpg', 'jpeg']) app = Flask(__name__) @app.route('/<path:path>', methods=["POST"]) def style_transfer(path): """ Take the input image and style transfer it """ # check if the post request has the file part if 'file' not in request.files: return BadRequest("File not present in request") file = request.files['file'] if file.filename == '': return BadRequest("File name is not present in request") if not allowed_file(file.filename): return BadRequest("Invalid file type") if file and allowed_file(file.filename): filename = secure_filename(file.filename) input_filepath = os.path.join('./images/', filename) output_filepath = os.path.join('/output/', filename) file.save(input_filepath) # Get checkpoint filename from la_muse checkpoint = request.form.get("checkpoint") or "la_muse.ckpt" ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0') return send_file(output_filepath, mimetype='image/jpg') def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS if __name__ == '__main__': app.run(host='0.0.0.0') BQQQZ NPVOU qPZESVOFOWLFSBTQZ EBUBQBUIUPNPEFMNPEFMT NPEFTFSWF 'MPZEFYQFDUTUIJTpMF UPDPOUBJOUIFDPEFUP SVOBXFCTFSWFSBOE MJTUFOPOQPSU  IUUQTEPDTqPZEIVCDPN FYBNQMFTTUZMF@USBOTGFS TFSWFNPEF  https:// www.floydhub.com/ expose/ABCDEFabcdef SPVUF ॻ͘
  61. 'MPZE)VCʹΑΔσϓϩΠͷਤ SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF %BUBTFU NPVOUBCMFGPMEFST 1SFWJPVTUSBJOJOHKPCT &OEQPJOU BQQQZ import os from

    flask import Flask, send_file, request from werkzeug.exceptions import BadRequest from werkzeug.utils import secure_filename from evaluate import ffwd_to_img ALLOWED_EXTENSIONS = set(['jpg', 'jpeg']) app = Flask(__name__) @app.route('/<path:path>', methods=["POST"]) def style_transfer(path): """ Take the input image and style transfer it """ # check if the post request has the file part if 'file' not in request.files: return BadRequest("File not present in request") file = request.files['file'] if file.filename == '': return BadRequest("File name is not present in request") if not allowed_file(file.filename): return BadRequest("Invalid file type") if file and allowed_file(file.filename): filename = secure_filename(file.filename) input_filepath = os.path.join('./images/', filename) output_filepath = os.path.join('/output/', filename) file.save(input_filepath) # Get checkpoint filename from la_muse checkpoint = request.form.get("checkpoint") or "la_muse.ckpt" ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0') return send_file(output_filepath, mimetype='image/jpg') def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS if __name__ == '__main__': app.run(host='0.0.0.0') BQQQZ NPVOU qPZESVOFOWLFSBTQZ EBUBQBUIUPNPEFMNPEFMT NPEFTFSWF 'MPZEFYQFDUTUIJTpMF UPDPOUBJOUIFDPEFUP SVOBXFCTFSWFSBOE MJTUFOPOQPSU  IUUQTEPDTqPZEIVCDPN FYBNQMFTTUZMF@USBOTGFS TFSWFNPEF  https:// www.floydhub.com/ expose/ABCDEFabcdef SPVUF IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  62. 'MPZE)VCʹΑΔσϓϩΠͷਤ SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF %BUBTFU NPVOUBCMFGPMEFST 1SFWJPVTUSBJOJOHKPCT &OEQPJOU BQQQZ import os from

    flask import Flask, send_file, request from werkzeug.exceptions import BadRequest from werkzeug.utils import secure_filename from evaluate import ffwd_to_img ALLOWED_EXTENSIONS = set(['jpg', 'jpeg']) app = Flask(__name__) @app.route('/<path:path>', methods=["POST"]) def style_transfer(path): """ Take the input image and style transfer it """ # check if the post request has the file part if 'file' not in request.files: return BadRequest("File not present in request") file = request.files['file'] if file.filename == '': return BadRequest("File name is not present in request") if not allowed_file(file.filename): return BadRequest("Invalid file type") if file and allowed_file(file.filename): filename = secure_filename(file.filename) input_filepath = os.path.join('./images/', filename) output_filepath = os.path.join('/output/', filename) file.save(input_filepath) # Get checkpoint filename from la_muse checkpoint = request.form.get("checkpoint") or "la_muse.ckpt" ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0') return send_file(output_filepath, mimetype='image/jpg') def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS if __name__ == '__main__': app.run(host='0.0.0.0') BQQQZ NPVOU qPZESVOFOWLFSBTQZ EBUBQBUIUPNPEFMNPEFMT NPEFTFSWF 'MPZEFYQFDUTUIJTpMF UPDPOUBJOUIFDPEFUP SVOBXFCTFSWFSBOE MJTUFOPOQPSU  IUUQTEPDTqPZEIVCDPN FYBNQMFTTUZMF@USBOTGFS TFSWFNPEF  https:// www.floydhub.com/ expose/ABCDEFabcdef SPVUF  5SBJO࣌ͱڞ௨ͷ%BUBTFU GPMEFS Λར༻  Ϟσϧͷ"SUJGBDUΛద੾ͳ৔ॴʹNPVOU͢Δ
 ద੾ͳ৔ॴΛࣗ෼Ͱߟ͑Δ   ىಈ࣌ʹ࣮ߦ؀ڥ AFOWA Λࢦఆ  %PDLFSpMF͸ෆཁ  ABQQQZAΛ࣮૷ͯ͠σϓϩΠ  Ϟσϧͷ"SUJGBDUΛಡΈࠐΜͰ1PSUͰ଴ͭ
  63. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λ ಛఆՄೳʹ͢Δ 'MPZE)VC ϓϦηοτ
 5FOTPS'MPX ,FSBT  1Z5PSDI FUD   BQQQZͰ࣮૷ BQQQZͰ࣮૷ "NB[PO 4BHF.BLFS IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  64. &OEQPJOU &$3 %PDLFSSFQPTJUPSZ "NB[PO4BHF.BLFSʹΑΔσϓϩΠͷਤ .PEFM"SUJGBDU GET /ping POST /invocations NPEFMTFSWFMBUFTU

     #VJME1VTI  NPEFMTFSWFMBUFTU %PXOMPBE TBHFNBLFS$SFBUF.PEFM TBHFNBLFS$SFBUF&OEQPJOU NPEFMUSBJOMBUFTU 5SBJOJOH+PC NPEFMUSBJOMBUFTU 6QMPBE TBHFNBLFS$SFBUF5SBJOJOH+PC   3FGIUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEH IPXJUXPSLTIPTUJOHIUNM 4BHF.BLFS1ZUIPO4%, NPEFMpU NPEFMEFQMPZ  TBHFNBLFS*OWPLF&OEQPJOU NPEFMQSFEJDU
  65. &OEQPJOU "NB[PO4BHF.BLFSʹΑΔσϓϩΠͷਤ .PEFM"SUJGBDU GET /ping POST /invocations QSFTFUTFSWFMBUFTU %PXOMPBE TBHFNBLFS$SFBUF.PEFM

    TBHFNBLFS$SFBUF&OEQPJOU 5SBJOJOH+PC QSFTFUUSBJOMBUFTU 6QMPBE TBHFNBLFS$SFBUF5SBJOJOH+PC   3FGIUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEH IPXJUXPSLTIPTUJOHIUNM 4BHF.BLFS1ZUIPO4%, QSFTFU@NPEFMpU QSFTFU@NPEFMEFQMPZ  TBHFNBLFS*OWPLF&OEQPJOU QSFTFU@NPEFMQSFEJDU 1SFTFU #VJMUJO 
 "MHPSJUINT
  -JOFBS-FBSOFS  9(#PPTU  *NBHF$MBTTJpDBUJPO  TFRTFR  FUD SFGIUUQTEPDTBXTBNB[PODPN TBHFNBLFSMBUFTUEHBMHPTIUNM
  66. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ ఆՄೳʹ͢Δ 'MPZE)VC ϓϦηοτ
 5FOTPS'MPX ,FSBT  1Z5PSDI FUD   BQQQZͰ࣮૷ BQQQZͰ࣮૷ "NB[PO 4BHF.BLFS ϓϦηοτʗ ࣗલͷ%PDLFS JNBHFΑΓબ୒ ෆཁ ϓϦηοτΛར༻͢Δ৔߹ෆཁ ಠࣗϞσϧΛʏඞཁ IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  67. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ ఆՄೳʹ͢Δ 'MPZE)VC ϓϦηοτ
 5FOTPS'MPX ,FSBT  1Z5PSDI FUD   BQQQZͰ࣮૷ BQQQZͰ࣮૷ "NB[PO 4BHF.BLFS ϓϦηοτʗ ࣗલͷ%PDLFS JNBHFΑΓબ୒ ෆཁ ϓϦηοτΛར༻͢Δ৔߹ෆཁ ಠࣗϞσϧΛʏඞཁ IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT ϓϦηοτͱͯ͠੩తͳ࣮ߦ؀ڥ Ϧετ ͕
 ఏڙ͞Ε͍ͯΔ
  68. ࣮ߦ؀ڥʹؔ͢Δߟ࡯  ʰز͔ͭͷ࣮ߦ؀ڥΛϓϦηοτͱͯ͠༻ҙͯ͠΍Δ͚ͩͰ
 σϓϩΠઌͷ؀ڥͱͯ͠͸े෼ػೳ͢Δͷ͔΋͠Εͳ͍ʱ
 .-BB4ʹ͓͚Δྫ͔ΒݟΒΕΔΑ͏ʹ   %PDLFSpMFʹΑΔ؀ڥͷఆٛͷखؒΛল͚ΔՄೳੑ͕͋Δ  ϓϦηοτΛࣾ಺EPDLFSSFQPTJUPSZͰఏڙ͢Ε͹ɺϩʔΧϧͰ΋ར

    ༻Ͱ͖Δ  ϩʔΧϧͱσϓϩΠઌͷ࣮ߦ؀ڥΛἧ͑Δͱ͍͏ίϯςφԽ
 σϓϩΠͷར఺Λอ͍ͬͯΔ
  69. 3VOUJNF T 
 EPDLFSSFQPTJUPSZ LFSBTQZ TFSWFQZ  ϩʔΧϧ
 ؀ڥ 1VMM

    %FQMPZNFOUT $MPVE 4UPSBHF 1VMM LFSBTQZ TFSWFQZ LFSBTQZ TFSWFQZ ͭ·Γ͜Μͳײ͡ 5SBJO 6QMPBE
  70. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ ఆՄೳʹ͢Δ 'MPZE)VC ϓϦηοτ
 5FOTPS'MPX ,FSBT  1Z5PSDI FUD   BQQQZͰ࣮૷ BQQQZͰ࣮૷ "NB[PO 4BHF.BLFS ϓϦηοτʗ ࣗલͷ%PDLFS JNBHFΑΓબ୒ ෆཁ ϓϦηοτΛར༻͢Δ৔߹ෆཁ ಠࣗϞσϧΛʏඞཁ IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  71. ϋϯυϥ ϞσϧͷϋϯυϦϯά  ͱ͸  ϞσϧͷαʔόʔΛ࡞Δ৔߹ʹɺҎԼͷػೳ͕ඞཁʹͳΔ  ϞσϧΛ ͓ͦΒ͘ϝϞϦʹ ಡΈࠐΉ

     ೖྗ "1*αʔόʔͷ৔߹SFRVFTU ΛϞσϧʹ౉͢  Ϟσϧ͔Βͷग़ྗΛड͚औΓSFTQPOTFʹฦ͢ "1* -PBE
  72. ϞσϧͷϋϯυϦϯά  ·ͣωοτϫʔΫͷ*0ͷ৔ॴͱܕΛಛఆ͢Δඞཁ͕͋Δ  ͜͜͸ϑϨʔϜϫʔΫʹΑͬͯ͘Δ
 ωοτϫʔΫ࣮૷࣌ʹJOQVUPVUQVU͕ܾ·Δ৔߹΋͋Δ 
 ,FSBT 1Z5PSDI +*5

    ౳   ݁ߏَ໳  *OQVU 0VUQVU ͕ෳ਺͋Δ৔߹͸ʁ  ඪ४ԽΛ͢ΔྲྀΕ΋͋Δ
  73. ϞσϧͷϋϯυϦϯά  ·ͣωοτϫʔΫͷ*0ͷ৔ॴͱܕΛಛఆ͢Δඞཁ͕͋Δ  ͜͜͸ϑϨʔϜϫʔΫʹΑͬͯ͘Δ
 ωοτϫʔΫ࣮૷࣌ʹJOQVUPVUQVU͕ܾ·Δ৔߹΋͋Δ 
 ,FSBT 1Z5PSDI +*5

    ౳   ݁ߏَ໳  *OQVU 0VUQVU ͕ෳ਺͋Δ৔߹͸ʁ  ඪ४ԽΛ͢ΔྲྀΕ΋͋Δ IUUQTTQFBLFSEFDLDPNBZFNPT QZUPSDIUPDB⒎FUPPOOYUPTIFODFOH YVFYJNPEFSVGBMTFEFQVSPJOJUVJUF
  74. ࣮ߦ؀ڥ 4FSWF࣮૷ ϞσϧͷϋϯυϦϯά
 ೖग़ྗͷಛఆͳͲ (PPHMF$MPVE
 .-&OHJOF ϓϦηοτ
 5FOTPS'MPX ෆཁ ηϛΦʔτ


    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ ఆՄೳʹ͢Δ 'MPZE)VC ϓϦηοτ
 5FOTPS'MPX ,FSBT  1Z5PSDI FUD   BQQQZͰ࣮૷ BQQQZͰ࣮૷ "NB[PO 4BHF.BLFS ϓϦηοτʗ ࣗલͷ%PDLFS JNBHFΑΓબ୒ ෆཁ ϓϦηοτΛར༻͢Δ৔߹ෆཁ 5FOTP'MPX .9/FU ಠࣗϞσϧඞཁ IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
  75. Ϟσϧͷ"1*ʹؔ͢Δߟ࡯  Ϟσϧͷ"1*ͱͯ͠ඞཁͳػೳʁ  QSFEJDU IFBMUIଞʹ͸ʁ  ׂΓ੾Ε͹݁ߏڞ௨Խग़དྷΔ
 (PPHMF$MPVE.-ͷྫʹݟΔΑ͏ʹ 

     લड़ͨ͠໰୊ʹൺ΂Ε͹ᘭ຤Ͱ͋Δ
 ࣮ߦ؀ڥͱϞσϧͷϋϯυϦϯά͕ͳΜͱ͔ͳΕ͹
 "1*ͷ࣮૷͸Ͳ͏ʹͰ΋ͳΓͦ͏
  76. ͪΐͬͱ·ͱΊ  ࣮ߦ؀ڥʗ"1*࣮૷ڞʹڞ௨Խग़དྷΔ༨஍͕͋Δ  ͔ͩΒͦ͜ .-BB4ͷΑ͏ͳڞ௨ج൫͕੒ཱ͠͏Δ  ະ࣮ͩ༻ྫ͸ଟ͘ͳ͍͕  ֤Ϟσϧ࣮૷ऀ͕σϓϩΠ·Ͱߦ͏ମ੍΋ෆՄೳͰ͸ͳ͍

  77. .-BB4ͱͷ෇͖߹͍ํ  ϓϥοτϑΥʔϜ͕αϙʔτ͢Δൣғ͸෼ް͘ͳͬͯ͘Δ ͸ͣ   $*$%ɺ"#ςετ $BOBSZ ͳͲ 

    ࠓޙ΋࣍ୈʹ৐͔ͬΔϝϦοτ͕େ͖͘ͳͬͯ͘Δ  খதن໛ͳػցֶशνʔϜͰ͸ࣗڅࣗ଍͢Δͷ΋ ࠓͷͱ͜Ζ 
 બ୒ࢶʹೖΔ
  78. Ϟσϧ Ϟσϧ࣮૷ ΞϓϦ
 ࣾ಺γεςϜ౳ σʔλऩू ܇࿅ ෼ੳ "1*࣮૷ %PDLFSԽ όον࣮૷

    ςετʗ؂ࢹ લॲཧ σϓϩΠ Ϟσϧ࣮૷ऀ͕ࣗ෼ͰσϓϩΠ͢Δ
  79. .-BB4͕ͪΐͬͱ෼͔ͬͨͷͰ ࣮ݧͯ͠Έͨ

  80. NPEFMQC 3VOUJNFEFpOJUJPOT LFSBTQZ 3VOUJNFT &$3 LFSBTQZ TFSWFQZ %PDLFSpMF  TFSWFQZ

    %PDLFSpMF UFOTPSqPXQZ TFSWFQZ %PDLFSpMF  UFOTPSqPXQZ TFSWFQZ %PDLFSpMF #VJME NFUBEBUBZNM name: cookpadnet model: path: model.pb input: input_1 output: final_result runtime: tensorflow
  81. NPEFMQC 3VOUJNFEFpOJUJPOT LFSBTQZ 3VOUJNFT &$3 LFSBTQZ TFSWFQZ %PDLFSpMF  TFSWFQZ

    %PDLFSpMF UFOTPSqPXQZ TFSWFQZ %PDLFSpMF  UFOTPSqPXQZ TFSWFQZ %PDLFSpMF #VJME NFUBEBUBZNM name: cookpadnet model: path: model.pb input: input_1 output: final_result runtime: tensorflow $ python deploy.py
 Uploading model artifacts to: s3://foo/model.pb Updating task definition... Updated: arn:aws:ecs:::task-definition/cookpadnet:1 Deploying new sevice...
  82. $ python deploy.py
 Uploading model artifacts to: s3://foo/model.pb Updating task

    definition... Updated: arn:aws:ecs:::task-definition/cookpadnet:1 Deploying new sevice... &$4 NPEFMQC 3VOUJNFEFpOJUJPOT LFSBTQZ 3VOUJNFT &$3 LFSBTQZ TFSWFQZ %PDLFSpMF  TFSWFQZ %PDLFSpMF UFOTPSqPXQZ TFSWFQZ %PDLFSpMF  UFOTPSqPXQZ TFSWFQZ %PDLFSpMF #VJME NFUBEBUBZNM name: cookpadnet model: path: model.pb input: input_1 output: final_result runtime: tensorflow
  83. $ python deploy.py
 Uploading model artifacts to: s3://foo/model.pb Updating task

    definition... Updated: arn:aws:ecs:::task-definition/cookpadnet:1 Deploying new sevice... &$4 NPEFMQC 3VOUJNFEFpOJUJPOT LFSBTQZ 3VOUJNFT &$3 LFSBTQZ TFSWFQZ %PDLFSpMF  TFSWFQZ %PDLFSpMF UFOTPSqPXQZ TFSWFQZ %PDLFSpMF  UFOTPSqPXQZ TFSWFQZ %PDLFSpMF #VJME NFUBEBUBZNM name: cookpadnet model: path: model.pb input: input_1 output: final_result runtime: tensorflow DVSMEBUBCJOBSZ!GPPEKQHIPHFMCFMCBNB[POBXTDPNQSFEJDU )$POUFOU5ZQFJNBHFKQFH \ SFTVMU< <     F > > ^
  84. ·ͱΊ  ೥݄ɺΫοΫύουݚڀ։ൃ෦ͷൃ଍  ࠓ·Ͱ૊৫ͱ֦ͯ͠େ͖ͯͨ͠  ͞ΒͳΔ֦େʹ଱͑͏Δεέʔϥϒϧͳ։ൃ؀ڥΛ࡞Γ͍ͨ  ֤Ϟσϧ࣮૷ऀ͕σϓϩΠ·Ͱߦ͏ମ੍΁ ޲͔͍͍ͨ

      .-BB4ͳͲͷطଘख๏Λࢀߟʹ࠷ળखΛ୳͍ͬͯΔॴ
  85. ΫοΫύουͷ
 ػցֶशج൫ ଓ͘

  86. એ఻  ͦΜͳج൫ΛҰॹʹ࡞Γ·ͤΜ͔  IUUQTDPPLQBEKPCT