define-and-run
線形代数ライブラリの欠点を改善
グラフの抽象化を導入
計算グラフを構築した後にデータを流して処理を実行する
GPU, Cloud TPU, アクセラレータハードウェア、複数のアクセラレータへの分散などがサポートされている
パフォーマンス的に有利
Pythonを使用して
DSLのTensowflowグラフを作る
メタプログラミングのようなイメージ
デプロイ時にPythonランタイムが必要なくなる
という意味がイマイチ理解できないのは、実際define-and-runが何を作っているものなのかが具体的にわかっていないからか

欠点
長所であるパフォーマンスなどを実現するためにusabilityが犠牲に。
ループや条件分岐の処理を書くのが大変
制御依存関係を正しく処理する必要がある
tf.while_loop()
とか?
形状の不一致エラーがわかりにくい
プログラマが書いた部分ではないランタイムコードを介してスタックトレースが作成されるため
インタプリタ的に段階的に操作するのが難しい
途中経過の処理状態を確認することが面倒
メタプログラミング的なのがプログラマにとって大変
ユーザビリティを向上するためにパフォーマンスを犠牲にすることを選択する人もいる
例
tf.add(A, B)
を実行する
このタイミングでA+Bを実行するわけではない
c = tf.maltiply(a, b)
aとbの積である数値がcに入る、わけではない!
入力を元に乗算の処理をする、というシンボリックリンクを計算グラフに書き込んでいる
使われているフレームワーク
Tensorflow session APIなど
参考