書籍転載:TensorFlowはじめました ― 実践!最新Googleマシンラーニング(3)

書籍転載:TensorFlowはじめました ― 実践!最新Googleマシンラーニング(3)

TensorFlowの“テンソル(Tensor)”とは? TensorBoardの使い方

2016年8月9日

転載3回目。テンソル(Tensor)とTensorBoardによるグラフの可視化を解説する。「第1章 TensorFlowの基礎」は今回で完結。

有山 圭二
  • このエントリーをはてなブックマークに追加

 前回はTensorFlowの基礎として、変数とプレースホルダーを説明しました。今回は、テンソル(Tensor)とTensorBoardによるグラフの可視化を解説します。

書籍転載について

 本コーナーは、インプレスR&D[Next Publishing]発行の書籍『TensorFlowはじめました ― 実践!最新Googleマシンラーニング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 『TensorFlowはじめました ― 実践!最新Googleマシンラーニング』(Kindle電子書籍もしくはオンデマンドペーパーバック)の詳細や購入はAmazon.co.jpのページをご覧ください。書籍全体の目次は連載INDEXページに掲載しています。プログラムのダウンロードは、「TensorFlowはじめました」のサポート用フォームから行えます。

ご注意

本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

1.4 テンソル(Tensor)

 TensorFlowは、グラフを構成するすべてのオペレーションを「Tensorテンソル)」として扱います。以後、TensorFlowの文脈で触れる「Tensor」は、「n次元の多次元配列」と考えて差し支えありません。

RankとShape, Type

 Rankは「テンソルの階数」、Shapeは「テンソルの形」を言います(表1.1)。

Rank Shape Dimension
0 [] 0次元 s = 713
1 [D0] 1次元 v = [1.1,2.2,3.3]
2 [D0, D1] 2次元 m = [[1,2,3],[4,5,6],[7,8,9]]
3 [D0, D1, D2] 3次元 t = [[[1,2,3]],[[4,5,6]],[[7,8,9]]]
N [D0,D1, ...Dn-1]n n次元
表1.1: TensorのRankとShape

 また、Tensorにはデータ型があります(表1.2)。

Pythonでの型 解説
tf.float16 16ビット浮動小数点
tf.float32 32ビット浮動小数点
tf.float64 64ビット浮動小数点
tf.int8 8ビット整数
tf.int16 16ビット整数
tf.int32 32ビット整数
tf.int64 64ビット整数
tf.uint8 符号無し8ビット整数
tf.string 可変長文字列
tf.bool 真偽値
表1.2: Tensorのデータ型(抜粋)

 たとえば画像データを表す場合、TensorのRankは[3]、Shapeは[width, height, channel]、データ型はtf.uint8*3となります。

 TensorFlowのウェブサイト*4に、より詳細な表があります。

 Rankが一致しないテンソルは演算できないなど、Tensorに起因するエラーに遭遇することは少なくありません。必要に応じて確認できるようにしておくと良いでしょう。

1.5 TensorBoardによるグラフの可視化

 TensorFlowには、強力な可視化ツール「TensorBoard」が搭載されています。TensorBoardを使えばグラフを可視化して、Webブラウザ上で見ることができます。

グラフの書き出し

 TensorBoardで読み込める形式でデータを出力します。

Python
const1 = tf.constant(2)
const2 = tf.constant(3)
add_op = tf.add(const1, const2)
mul_op = tf.mul(add_op, const2)

with tf.Session() as sess:
  result, result2 = sess.run([mul_op, add_op])
  print(result)
  print(result2)
  
  tf.train.SummaryWriter('./', sess.graph)
リスト1.11: TensorBoardにデータを書き出す

 リスト1.11を実行すると、スクリプトと同じディレクトリにTensorBoard用のファイル*5が作成されます。

  • *5 ただしConvolutional Neural Networkで処理する場合はtf.float32に変換する必要があります。
TensorBoardの起動

 次に、TensorBoardを起動します。TensorFlowがインストールされていれば、コマンドtensorboardで起動できます。

 引数--logdirには、tf.train.SummaryWriterに指定した出力先のディレクトリを指定します。

$ tensorboard --logdir=[TensorBoard用のファイルがあるディレクトリ]
Starting TensorBoard b'16' on port 6006
(You can navigate to http://0.0.0.0:6006)

 ブラウザでhttp://localhost:6006にアクセスして、上部メニューから「GRAPH」を選択すると、構築したグラフ画像が表示されます。画像を見れば、オペレーション同士がどう結びついているのか視覚的に確認することができます。

図1.6: TensorBoardで可視化したグラフ

 また、グラフを構成する各オペレーションをクリックすると、詳細な情報を確認できます。例えば図1.7を見れば、オペレーションMulは、オペレーションAddと定数Const_1の入力を受けていることがわかります。

図1.7: オペレーションMulの詳細を表示

 この他にもTensorBoardには、学習中のモデルのパラメーターをグラフとして表示するなど、便利な機能がたくさんあります。

 TensorBoardの詳細は、Webサイト*6を参照してください。

  • *6 TensorBoard Visualizing Learning : https://www.tensorflow.org/versions/r0.9/how_tos/summaries_and_tensorboard/index.html

 以上で「第1章 TensorFlowの基礎」は完結です。次回からは「第2章 CIFAR-10の学習と評価」を転載します。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

1. TensorFlowとは? データフローグラフを構築・実行してみよう

技術書オンリー即売会「技術書典」で頒布された同名出版物をベースとして制作されたTensorFlowの入門書籍を転載開始。その1回目として、データフローグラフや定数といったTensorFlowの基礎を説明する。

2. TensorFlow入門 ― 変数とプレースホルダー

転載2回目。TensorFlowの基礎の第2弾として、変数とプレースホルダーを実際のコードと実行結果で示しながら解説する。

3. 【現在、表示中】≫ TensorFlowの“テンソル(Tensor)”とは? TensorBoardの使い方

転載3回目。テンソル(Tensor)とTensorBoardによるグラフの可視化を解説する。「第1章 TensorFlowの基礎」は今回で完結。

4. TensorFlowでデータの読み込み ― 画像を分類するCIFAR-10の基礎

転載4回目。今回から「畳み込みニューラルネットワーク」のモデルを構築して、CIFAR-10のデータセットを使った学習と評価を行う。今回はデータの読み込みを説明。

5. TensorFlowによる推論 ― 画像を分類するCIFAR-10の基礎

転載5回目。CIFAR-10データセットを使った学習と評価を行う。画像データの読み込みが終わったので、今回は画像の種類(クラス)を判別、つまり「推論」について説明する。

イベント情報(メディアスポンサーです)

Azure Central の記事内容の紹介

GrapeCity Garage 記事内容の紹介

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • 日本マイクロソフト株式会社
  • グレープシティ株式会社