カレーちゃんブログ

Kaggleや競技プログラミングなどのこと

TensorFlow機械学習クックブック2章のメモ

TensorFlow機械学習クックブックの2章を読みました。
詳解ディープラーニングで、TensorFlowに触れているのでそんなに難しいところはなかったですが、この本ではじめてTensorFlowという人は多分きついんじゃないかという感じ。
とりあえず今回は読み終わったという内容だけですが、次回くらいから何かしら応用をしたいところ。

第2章目次と概要とサンプルコードへのリンク

第2章 TensorFlowスタイル―演算/層の追加、損失関数やモデル評価などの実装/
2.1 はじめに
2.2 計算グラフでの演算<Recipe 9>
2.3 入れ子の演算を階層化する<Recipe 10>
2.4 複数の層を操作する<Recipe 11>
2.5 損失関数を実装する<Recipe 12>
2.6 バックプロパゲーションを実装する<Recipe 13>
2.7 バッチトレーニングと確率的トレーニングを使用する<Recipe 14>
2.8 分類を行うための要素を組み合わせる<Recipe 15>
2.9 モデルを評価する<Recipe 16>

概要

  • 2.2 配列を作成しplaceholderに送るりそれに定数をかける
  • 2.3 配列を作成し、2つの乗算を行い、加算する
  • 2.4 様々な層を結合(conv2dとCustumLayer)
  • 2.5 tensorflowでのさまざまな損失関数の実装
  • 2.6 バックプロパゲーション(誤差逆伝播法)
  • 2.7 バッチトレーニングと確率的トレーニングの違いと、TensorFlowで実装する方法を紹介
  • 2.8 Irisの線形分類機を作成
  • 2.9 回帰と分類という2つのモデリングを実行。TensorFlowアルゴリズムでモデルを評価する方法を示す

サンプルコード

  1. 01_Operations_as_a_Computational_Graph
  2. 02_Layering_Nested_Operations
  3. 03_Working_with_Multiple_Layers
  4. 04_Implementing_Loss_Functions
  5. 05_Implementing_Back_Propagation
  6. 06_Working_with_Batch_and_Stochastic_Training
  7. 07_Combining_Everything_Together
  8. 08_Evaluating_Models

第2章をやる前に

それぞれの節で計算グラフでの説明がしてありわかりやすいです。 ローカルでの計算グラフの表示の仕方は2章までに書いていなかいので(11.2TensorBoardで計算グラフを可視化するで説明があるらしい)、とりあえず表示するだけなら以下のようにすれば、計算グラフを表示させることができます。

tensorboardの使い方(2.1節の場合)

my_writer = tf.summary.FileWriter('tensorboard_logs/', sess.graph) # 左記のようにログをtensorboard_logsに保存した

# ターミナルから以下を実行
$ tensorboard --logdir=tensorboard_logs

# ブラウザからhttp://localhost:6006/#graphs にアクセス

# グラフの確認が終わったらターミナルで CTRL+C

さらに詳しくは、公式を見ましょう。
TensorBoard: Visualizing Learning  |  TensorFlow

2章のポイントと補足

2.3 入れ子の演算を階層化する<Recipe 10>

tensorflowの初心者的には、2.3のRecipe10が1番の山場でしょう。行列計算を丁寧にやる必要がありますが実は以下の計算をやっているだけ。この数式を見ながら自分のブラウザからtensorboardの変数をクリックして理解を深めましょう。 f:id:currypurin:20170826215229p:plain
f:id:currypurin:20170826215240p:plain
ここを過ぎれば残りは他の本で聞いたことがある内容をtensorflowだとこのように書くのかというように、流し読みする感じでした。

2.6 バックプロパゲーションを実装する<Recipe 13>

以下のようにlogitsとlabelsを指定してあげる必要があった。

xentropy = tf.nn.sigmoid_cross_entropy_with_logits(logits = my_output_expanded,labels = y_target_expanded)

2.8 分類を行うための要素を組み合わせる<Recipe 15>

こちらも少し補完が必要

my_output = tf.subtract(x1_data, my_add)
# Add classification loss (cross entropy)
xentropy = tf.nn.sigmoid_cross_entropy_with_logits(logits = my_output, labels=y_target)

2.9 モデルを評価する<Recipe 16>

同じく補完が必要

# Add classification loss (cross entropy)
xentropy = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits = my_output, labels = y_target))

参考になったページ