おれの技術日記

元はJava+SQLがメインのエンジニア、フロントエンドは軽くかじった程度で苦手。最近忘れっぽいので覚えたことをいろいろメモするためにブログ開始。

Machene Learning Crash Course 4 - First Steps with TensorFlow #1

ついに来たTensorFlow、名前はよく聞くしML=TensorFlow的なイメージはあるけれど全然中身はわからないという。しかもたぶんガンガン機能追加とかされてるから適当に日本語サイトをググっても常に古めの情報になってしまうんでないかという懸念から更に億劫になって結局何もやらないという。今日はこの悪循環をついに断ち切ろうと思う。

First Steps with TensorFlow: Toolkit  |  Machine Learning Crash Course  |  Google DevelopersTensorFlow Guide  |  TensorFlowを見比べると、どうやらC++カーネルに対して複数レイヤーでのラッピングが行われた構成になっていて、実際のプログラミングにあたってはLow Level APIとHigh Level APIの両方が使えるようであることがわかる。多分Low Level APIを使って自前でモデルを組むこともできるし、やりたいことが結構一般的な話ならばHigh Level APIを使ってサクッと実現できるよってことなんじゃなかろうか。とはいえ、これ以外にも画像認識のためのVision APIやら文字起こしのためのSpeech APIみたいなものがGoogle Cloudから提供されていることを考えると、オーディエンスのレベルに応じて多くの抽象化レイヤーを提供してる感じ。ちなみにLow Level APIのことをTensorFlow Coreともいったりするみたい。推奨としてはまずいちばんHigh LevelなAPIを使用して、必要に応じてひとつずつ下っていけとのこと。このコースでもEstimatorがメインらしい。

ここで用語の確認。

  • tensor : n次元配列のこと、0次元配列(=通常の数値とか文字列とか)も一応この定義によるとtensorの一部らしい。つまり変数とか定数とか、とにかくそういうのは全部tensorぽい。
  • rank : tensorの次元数。rank 1 tensorというと1次元配列。
  • shape : 配列に入ってる要素の数。

さらに、以下のような図がよく機械学習では出てくるけれど(qiita.comのリンク)、ここで
https://camo.qiitausercontent.com/da8208bf5b32d3f382241c08aaffe5b7a02b5fa4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f32353939302f32326632353639372d653534652d353932382d646566632d6561323063643037373138372e706e67

  • graph : このフローチャートみたいな図のこと(処理の流れ)
  • operation : 各ノード(○)。データに対する操作。

で各ノードをつないでいる棒がtensorらしい。で、この処理を実際に実行する場合にはsessionを作成して行う模様。多分graphとsessionはオブジェクト指向のclassとinstanceみたいな関係なんだろう。

さらにさらに、ここらへんのアイテムはhyperparameterというらしい。

  • steps : iteration回数。1stepは1batchのlossを計算し、これをウェイトの調整に使う。
  • batch size : 前回も出てきたけれど、一回のstepで使用するexample数。

なので、
total number of trained examples = batch size * steps
となる。

なお、これに関連する用語で

  • period : レポーティングの粒度をコントロールする変数。もしstepが70でperoidが7なら10stepごとにlossが出力される。この値は通常変更しないらしい。(レポーティング用の変数なのでモデルの精度とかには特に影響しない)