Musashitokiwa.LLC Blog

武蔵常盤株式会社のブログです。

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 9

今回は、Chapter3-2-2に記載されています、「TensorBoard」について書きます。

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

先回まで挨拶文を先に書いていたのですが、ブログの一覧表示(

2017-01-01から1年間の記事一覧 - His 1st Japan.LLC Blog

)をみて、一目で何が書かれているのかわからないということに気がつきまして、今回から、書き方を工夫しました。

今回で9回目です。

今回はまとめではなくて、TensorBoardについて記載します。(とは言っても、使い方について詳細には記載しません。)この本に書いてあるレベルでの扱いに終始します。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

 

まず、これ。

Chapter3-2-2で作成したサンプルプログラムを図解したもの。

この図を見れば、プログラムの構成がわかる人は、このブログで学ぶことはないと思います。

f:id:a-j1b1k1:20170730214056p:plain

そして、各オブジェクトをオープンした図。

これは学習を可視化したものです。

ぱっと見なんのことだかわかりませんが、これは以下のプログラムを可視化したものです。

 

class SingleLayerNetwork:
def __init__(self, num_units):

with tf.Graph().as_default():
self.prepare_model(num_units)
self.prepare_session()

def prepare_model(self, num_units):
with tf.name_scope('input'):
x = tf.placeholder(tf.float32, [None, 784], name='input')

with tf.name_scope('hidden'):
w1 = tf.Variable(tf.truncated_normal([784, num_units]),
name='weights')
b1 = tf.Variable(tf.zeros([num_units]), name='biases')
hidden1 = tf.nn.relu(tf.matmul(x, w1) + b1, name='hidden1')

with tf.name_scope('output'):
w0 = tf.Variable(tf.zeros([num_units, 10]), name='weights')
b0 = tf.Variable(tf.zeros([10]), name='biases')
p = tf.nn.softmax(tf.matmul(hidden1, w0) + b0, name='softmax')

with tf.name_scope('optimizer'):
t = tf.placeholder(tf.float32, [None, 10], name='labels')
loss = -tf.reduce_sum(t * tf.log(p), name='loss')
train_step = tf.train.AdamOptimizer().minimize(loss)

with tf.name_scope('evaluator'):
correct_prediction = tf.equal(tf.argmax(p, 1), tf.argmax(t, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,
tf.float32), name='accuracy')

tf.scalar_summary("loss", loss)
tf.scalar_summary("accuracy", accuracy)
tf.histogram_summary("weights_hidden", w1)
tf.histogram_summary("biases_hidden", b1)
tf.histogram_summary("weights_output", w0)
tf.histogram_summary("biases_output", b0)

self.x, self.t, self.p = x, t, p
self.train_step = train_step
self.loss = loss
self.accuracy = accuracy

def prepare_session(self):
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
summary = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/mnist_sl_logs", sess.graph)

self.sess = sess
self.summary = summary
self.writer = writer

 

 

レビューの時に役に立ちそうです。

設計者が、この図を使って設計して、プログラムが自動生成できるなんて機能は・・・残念ながらなさそう。

 

f:id:a-j1b1k1:20170730214532p:plain

で、次。

正解率と、誤差関数の値をグラフにしたもの。

f:id:a-j1b1k1:20170730215051p:plain

 

パラメータ(Valiable)の変化をグラフにしたもの。

f:id:a-j1b1k1:20170730214906p:plain

f:id:a-j1b1k1:20170730214838p:plain

なんか、物足りないと思ったが、結果のグラフに関しては、Jupyterにてグラフを作っている。

なんか、もっと使いこなせばものすごいことができそうな予感。

でも、この本に関して書いてあるレベルではこの程度しか記載してないのが残念。

なので、外部のページを調べて見た。

TensorFlow : How To : TensorBoard: 学習を視覚化する – TensorFlow