Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Talk about ML and DL for happy engineer's life
Search
Norihiro Shimoda
October 08, 2016
Technology
40
15k
Talk about ML and DL for happy engineer's life
DevFest Tokyo 2016での発表資料
http://gdg-tokyo.connpass.com/event/38927/
Norihiro Shimoda
October 08, 2016
Tweet
Share
More Decks by Norihiro Shimoda
See All by Norihiro Shimoda
ぼくのかんがえたさいきょうの機械学習プロジェクト進行法(PoC/デモ編)
rindai87
10
19k
FindYourCandyでの転移学習の話
rindai87
4
15k
Google I/O 報告会(ML)担当
rindai87
3
9.4k
最近のTensorFlowの話
rindai87
1
1.4k
TensorFlowとGCPの簡単な紹介
rindai87
3
4.4k
TensorFlowの基礎
rindai87
2
4.3k
TFv1.0の概要+HighLevelAPI/Keras
rindai87
4
2.1k
How should engineers survive during AI era
rindai87
5
27k
Let's stand up against "Do Artificial Intelligence" with proper knowledge
rindai87
6
1.8k
Other Decks in Technology
See All in Technology
Connect × Server-Side Kotlinで実現する!スキーマ駆動開発と品質改善の実践
sansantech
PRO
1
170
Reliability Engineering at Studist
katsuhisa91
PRO
0
130
How is Cilium Tested?
yutarohayakawa
5
310
プロダクトマネージャーは 事業責任者の夢をみるのか pmconf2024
gimupop
2
9.6k
スパイクアクセス対策としての pitchfork 導入
riseshia
0
210
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
130
Will Positron accelerate us?
lycorptech_jp
PRO
1
130
2000年てづくりキーボードの旅
tagomoris
1
170
TimeTreeが経た3つの転換点 ー プロダクト成長過程でその時、その瞬間、何を考えてたか
ysmtysts
1
4k
データパイプラインをなんとかした話 / Improving the Data Pipeline in IVRy
mirakui
0
230
2024/12/05 AITuber本著者によるAIキャラクター入門 - AITuberの基礎からソフトウェア設計、失敗談まで
sr2mg4
2
590
長年運用されているサービスの主要データ移行をサービス停止せず安全にリリースしました
phayacell
2
210
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
181
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Embracing the Ebb and Flow
colly
84
4.5k
Writing Fast Ruby
sferik
627
61k
A better future with KSS
kneath
238
17k
Making Projects Easy
brettharned
116
5.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Site-Speed That Sticks
csswizardry
1
160
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
1
150
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Docker and Python
trallard
41
3.1k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Transcript
エンジニアとして 知っておくと幸せになれる (かも知れない) 機械学習とTensorFlowのこと by Norhiro Shimoda
⾃自⼰己紹介 • 下⽥田倫倫⼤大(@rindai87) • データ分析専業の会社で⾊色々やってます。 • 職歴的にはエンジニアになりますが、何故か データサイエンス的な話で露露出させていただく 機会が多めです。
• つい⼀一昨⽇日の2016年年10⽉月 8⽇日に発⾜足しました(させ ました) • 先⾏行行して動いているいくつ かの勉強会とも合流流予定 • CloudMLなどもスコープに 活動していく予定
TensorFlow User Groupについて 公開資料料ではカット
None
None
#2のMeetupも計画中
最近、機械学習とか ⼈人⼯工知能が ものすごいブームですね 出典:https://www.coursera.org/learn/machine-‐‑‒learning
⼈人⼯工知能すごい!というイメージ 出典:https://www.google.com/selfdrivingcar/where/ 出典: https://gogameguru.com/i/2016/03/AlphaGo-‐‑‒ Lee-‐‑‒Sedol-‐‑‒game-‐‑‒3-‐‑‒game-‐‑‒over.jpg ⾃自動運転 AlphaGO ⼈人が運転するより事故率率率が低いらしい 囲碁のプロ棋⼠士に勝利利した
⼈人⼯工知能使えそう!というイメージ 出典:https://cloud.google.com/products/ 超すごいGoogleの ⼈人⼯工知能の要素技術を クラウドで簡単に使えそう な雰囲気!!!
結果、こういう流流れが できつつあります
クラウドで ⼈人⼯工知能関連のAPI あるじゃない ↓ APIを使ってみる ↓ ビジネスニーズに 微妙にフィットしない ↓ スクラッチでやるしか
↓ 機械学習むずい \(^o^)/
エンジニアを取り巻く環境 機械学習が使 えそうな案件 ⼈人⼯工知能が キーワードに なっている新 規案件 ⼈人⼯工知能やりた まえという謎の プレッシャー
⼈人⼯工知能や機械 学習への興味 数年年前まではなかった機械学習や⼈人⼯工知能 というキーワードが⾒見見え隠れする今⽇日このごろ
エンジニアも機械学習 っぽい話が分かった⽅方が 良良さそう??
本⽇日お話すること 誰でも⼤大体理理解した気になれる 機械学習とTensorFlowの話
まずは機械学習のお話
弊社でもよくある話 機械学習とか分析を勉強したいん ですよね 社内にいるデータサイエンティス トに聞いたり⾃自分で勉強すればい いんじゃないですか? それがどうしたら良良いかよくわか らないんですよー エンジニア 私
機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •
Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •
Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
ブラックボックスとしての機械学習 アルゴリズムが取り扱えるデータフォーマット 機械学習のアルゴリズム 何らかの結果 ⼊入⼒力力 ⼊入出⼒力力の変換だけして ライブラリ呼び出し
⾔言ってることはわかるけど⾯面⽩白くない 著作者:dice-‐‑‒kt 出典:http://free-‐‑‒photos.gatag.net/2014/05/15/180000.html
機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •
Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
⽤用途別のアルゴリズムの選択 出典:http://scikit-‐‑‒learn.org/stable/tutorial/machine_̲learning_̲map/
やっぱり⾔言ってることは わかるけどやりたかった 機械学習ではない 著作者:Gwen241 出典:http://free-‐‑‒photos.gatag.net/2014/07/20/060000.html
機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •
Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択
出典:http://playground.tensorflow.org/
結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択
出典:http://playground.tensorflow.org/ アルゴリズムや使っているツー ルに合わせ、いい感じの結果が 出るように⼊入⼒力力を加⼯工する
結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択
出典:http://playground.tensorflow.org/ 結果を⾒見見て今のパラメータ で良良いかかどうかを判断
結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択
出典:http://playground.tensorflow.org/ ⾚赤いところを問題に合わせて いい感じに調整する
結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択
出典:http://playground.tensorflow.org/ あー、これじゃだめだ、 とそもそも違うアルゴリズムを 選ぶこともある
機械学習っぽいけど 急に難易易度度が上がりすぎじゃね? 出典:http://labaq.com/archives/51849423.html
Step2までだと機械学習 やってる感がありません 機械学習やってる感が欲しい⼈人は Step3以降降を⽬目指すと 良良いかもしれません
Step3以降降に進むには • 数学から逃げずに⽐比較的硬派な本などで地道に 知識識を蓄えていきましょう ※私もStp2と3の間をウロウロしている1⼈人な気がします… etc…
ちなみに深層学習もこうなの? という疑問に関しては…
いわゆる機械学習 アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択 ここをどれだけ頑張るが 結果に⼤大きく影響を与える
深層学習と⾔言われている領領域 アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング
アルゴリズムの 再選択 層が深いためパラメータが すごくたくさんある
層がものすごくたくさん 各層毎に様々なパラメータが… 出典:http://playground.tensorflow.org/
例例:Inception-‐‑‒V3 出典:https://research.googleblog.com/2016/03/train-‐‑‒your-‐‑‒own-‐‑‒image-‐‑‒classifier-‐‑‒with.html ImageNetという画像分類のベンチマー クのためにGoogleが発案したモデル
Step4以降降の話には⾏行行かずに TensorFlowのお話
TensorFlowとは? • Googleによって2015年年11⽉月に公開されたオー プンソース – Google内部で多数の使⽤用実績があるらしい Google Photo 画像の⾃自動分類 Google
翻訳 翻訳の⾃自動学習 Gmail スパムフィルタ OK Google ⾳音声認識識
TensorFlowにありがちな勘違い TensorFlowは深層学習に 特化したツールである
TensorFlowの正しい認識識 TensorFlowはデータフローグラフを 利利⽤用した数値計算のための オープンソースの ソフトウェアライブラリである TensorFlow™ is an open source
software library for numerical computation using data flow graphs. TensorFlow公式サイトより
TensorFlowの超基本 OP Input Output OP OP Input グラフを意識識しながら処理理を記述して 最後にどびゃっと実⾏行行する
TensorFlowのパラダイム • はじめにテンソルの演算グラフを作る • グラフの実⾏行行単位をセッションという • 定数、変数、プレースホルダーを宣⾔言できる • 作ったグラフはデバイス(CPUやGPU)に展開 して実⾏行行する
• 分散処理理も可能である
TensorFlowのパラダイム • はじめにテンソルの演算グラフを作る • グラフの実⾏行行単位をセッションという • 定数、変数、プレースホルダーを宣⾔言できる • 作ったグラフはデバイス(CPUやGPU)に展開 して実⾏行行する
• 分散処理理も可能である ということを、Pythonをインターフェースとして ⾏行行っているフレームワーク 機械学習に関する便便利利なヘルパー関数がいっぱい あるのがポイント
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
1+2 = 3の⾜足し算
演算(Operation) x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant()
演算(Operation) x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant() 1 2
3
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
カウントアップ
変数(Variable) inc(定数) + cnt(変数) 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある tf.assign() tf.Variable() tf.constant() tf.add()
1 0
変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 0
1 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 1
2 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 2
3 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
いろんな値を⼊入⼒力力する
プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる
1
プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() feed_̲dict 1
1 2 あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる
プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() feed_̲dict 3
1 4 あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
実⾏行行環境を分ける
セッション 1(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1(定数) +
cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() セッションにより グラフの実⾏行行環境が まるっと独⽴立立する 名前空間のようなもの tf.Session() tf.Session()
ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)
• 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
テンソル(Tensor) のランクを⼤大きくする ここまでの話を 多次元の値に拡張
テンソル ランク どうなる 0 スカラ(要はただの数値) 1 ベクトル(配列列) 2 ⾏行行列列(2次元配列列) 3
3次元配列列(⾏行行列列に厚みがある感じ) n n次元配列列(イメージできない世界) 要は取り扱うデータ構造のことだと思ってください 今までの話はここ
多次元版の⾜足し算
⼊入⼒力力となるテンソルが違うだけ x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant() [[1,2], [1,2]]
[[3,4], [3,4]] [[4,6], [4,6]]
TensorFlowで押さえるべき基本 は以上です このパラダイムに従って深層(機 械)学習のアルゴリズムを記述す る必要があります
深層学習について ディープラーニング、深層学習とは、多層構造の ニューラルネットワークを⽤用いた機械学習である。 Wikipediaより … … … … … …
⼊入⼒力力層 中間層 (本当はもっといっぱい) 出⼒力力層
ニューラルネットワークの グラフのノード⼀一個⼀一個が TensorFlowの グラフのノードになって…
と、思いがちなので 若若⼲干ややこしい
TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値
アルゴリズムへの フィードバック 情報の演算 … …
例例えば中間層が3層の ニューラルネットワークだと こうなる
None
None
TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値
アルゴリズムへの フィードバック 情報の演算 tf.placeholder() ヘルパー関数 ヘルパー関数 tf.placeholder() tf.variable() … …
TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値
アルゴリズムへの フィードバック 情報の演算 tf.placeholder() ヘルパー関数 ヘルパー関数 tf.variable() tf.placeholder() tf.variable() … … つまり、学習と呼ばれて いるプロセスはここを決 めることに相当
学習とは… ・良良さげなtf.Variableの値を探索索すること 学習済みのモデルとは… ・グラフの構造そのもの ・グラフ構造に含まれるtf.Variableの値 学習済みのモデルの適⽤用とは… ・tf.Variableが決まった後のグラフに データを通すこと 深層(機械)学習は時間かかるけど 学習済みのモデルは⼩小さくなるし、
新しいデータの適⽤用する時は早い云々… TensorFlowの⽂文脈では…
いざ取り組もうとすると TensorFlowのパラダイムを意識識しつつ 使っているヘルパー関数の 意味を理理解した上で プログラミングする必要があり けっこう敷居が⾼高い
TensorFlowに関する事実(再掲) Pythonをインターフェースとした深層学習に特化し た便便利利ツール Python版だと機械学習のためのヘルパー関数が多数 提供された機械学習と相性の良良いデータフロープロ グラミングのフレームワーク ※当然、深層学習もターゲットにしているので相性 は良良い
Chainerとかと⽐比べて、セッショ ンとかよくわからない概念念が⼀一杯 出てきて使いにくいんですよね そもそも深層学習の⼀一般的な知識識 がないので、どんな⾵風にグラフを 構築したり、ヘルパー関数やパラ メータをどう選択すればいいかよ くわからないんですよね 結果、こういう評価になりがち データサイエンティスト評
エンジニア評
逆にGoogleには エンジニアリング⼒力力の⾼高い数学 がバリバリできる超優秀な⽅方が 沢⼭山いらっしゃるということ 実はこれが今⽇日⾔言いた かったことの⼀一つ
それはさておき 当然同じような問題を みんなが抱えているため こういう解決策が出ています
tf.contrib.learn(旧skflow) • Pythonの機械学習ライブラリであるScikit-‐‑‒learn のように関数呼び出しの感覚でTensorFlowを使 いたい!として始まったプロジェクト – グラフなどを意識識しないで済む⾼高レベルAPIを提供 • TensorFlowのV0.8で本体に取り込まれた •
⼀一緒に深層学習以外のアルゴリズムも提供されて いる – 線形分類や線形回帰など
中間層が3層のニューラルネットワークのtf.contrib.learn版
Keras • ニューラルネットワークに関する⾼高レイヤな記 述を⾏行行うことができるPythonのライブラリ – 要は深層学習⽤用のDSL的なもの – 記述スタイルはChainerっぽい • バックエンドとしてTheanoやTensorFlowを選
択可能なのでTensorFlow専⽤用というわけではな い • TensorFlow特有の知識識は必要ない
中間層が3層のニューラルネットワークのKearas版
⼤大規模データも分散処理理で対応で きるし、深層学習の処理理の記述に 集中できます。(想像) 深層学習とかはよくわからないで すが、関数を呼び出す時のパラ メータを⾊色々いじるとなんとなく 動くところまでは持っていけるの で楽ですね。(想像) これなら、こういう評価になる?? データサイエンティスト評(想像)
エンジニア評(想像)
なんとなくこの流流れは Hadoopのときのトレンド が思い出されるのは 私だけでしょうか?
MapReduceとHive MapReduceを意識識しないし 何より慣れ親しんだSQL ⽣生のMapReduceで 処理理を書くのは⾟辛い データサイエンティスト
TensorFlowとKeras データサイエンティスト TensorFlowを意識識しないで アルゴリズムに集中できる ⽣生のTensorFlowを 書くのは⾟辛い
深層学習界隈で インターフェースのデ ファクトになるのはなん なんでしょうね・・・?
TensorFlowの 話をするなら外せない CloudMLの話も少し
出典:https://cloud.google.com/blog/big-‐‑‒data/2016/09/google-‐‑‒cloud-‐‑‒machine-‐‑‒learning-‐‑‒now-‐‑‒open-‐‑‒to-‐‑‒all-‐‑‒with-‐‑‒new-‐‑‒professional-‐‑‒ services-‐‑‒and-‐‑‒education-‐‑‒programs 9/29にPublic Betaに!
CloudMLでできること • TensorFlowによる学習をクラウド上で実⾏行行できる – GCS経由でのデータのやり取りなどのお作法がある – マシンパワーがたくさん使えるので分散処理理やパラメー タの⾃自動チューニングなどができる! • 学習済みのモデルをサービスとしてクラウド上で
提供できる – gcloud経由 – RestAPI経由
CloudMLでできること • TensorFlowによる学習をクラウド上で実⾏行行できる – GCS経由でのデータのやり取りなどのお作法がある – マシンパワーがたくさん使えるので分散処理理やパラメー タの⾃自動チューニングなどができる! • 学習済みのモデルをサービスとしてクラウド上で
提供できる – gcloud経由 – RestAPI経由 TensorFlowのチュートリアルを ⼿手元のPCで動かしてみると、この領領域での GPUやクラウドの重要性が分かります
出典:http://gadgetm.jp/I0000291 チュートリアルでこうなる
CloudMLも絡めたワークフロー 学習済み モデル ① ①ローカルで動作チェック ②クラウドでドカンと計算 ③学習済みモデルをクラウド上、 サーバー、モバイル上で提供 ② ③
③ ③
CloudMLに関しては、今後 ⼤大きな計算資源が必要になる 深層学習が普及していくと かなりのキラーコンテンツ となる可能性がありそうです
最後にもう⼀一度度 TensorFlow User Group
None
None
#2のMeetupも計画中
Thank You!