天天看點

Tensorflow可視化功能--tensorboard

初步實作

tensorflow自帶有非常強大的可視化功能tensorboard

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

a = tf.constant(32.11, name="a")
b = tf.constant(30.215, name='b')
c = a + b

var = tf.Variable(tf.random_normal(shape=[2, 3], mean=0.0, stddev=1.0))
# 顯示初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    # 把程式圖寫進summary事件檔案
    tf.summary.FileWriter("/Users/lawa/PycharmProjects/tens/tmp/summary", graph=sess.graph)
    sess.run([c, var])
           

運作程式生成事件檔案

Tensorflow可視化功能--tensorboard

指令行運作

tensorboard --logdir=/Users/lawa/PycharmProjects/tens/tmp/summary
           

如果/Users/lawa/PycharmProjects/tens/tmp/summary裡有多個事件檔案,預設選擇最新的一個

Tensorflow可視化功能--tensorboard

界面展示(不同的版本可能布局不一樣)

Tensorflow可視化功能--tensorboard
  • SCALARS:展示訓練過程中的準确率、損失值、權重/偏置的變化情況,一般是單個數值
  • IMAGES:展示訓練過程中及記錄的圖像
  • AUDIO:展示訓練過程中記錄的音頻
  • GRAPHS:展示模型的資料流圖,以及各個裝置上消耗的記憶體和時間
  • DISTRIBUTIONS:展示訓練過程中記錄的資料的分布圖
  • HISTOGRAMS:展示訓練過程中記錄的資料的柱狀圖 一般是多元資料
  • EMBEDDINGS:展示詞向量後的投影分布

訓練過程可視化

代碼

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'


def generate_data():
    x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name='x')
    y = tf.matmul(x, [[0.6]]) + 3
    return x, y


def myregression():
    """
    自實作線性回歸
    :return:
    """
    # 變量作用域,在可視化的時候更有條理
    with tf.variable_scope('data'):
        x, y = generate_data()
    with tf.variable_scope('modle'):
        # 建立模型  y = x * a + b
        a = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='weight_a')
        b = tf.Variable(0.0, name='bias_b')
        y_predict = tf.matmul(x, a) + b

    with tf.variable_scope('loss'):
        # 建立損失函數
        loss = tf.reduce_mean(tf.square(y_predict - y))
    with tf.variable_scope('opyimizer'):
        # 訓練
        train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss=loss)

    # 收集變量顯示在tensorboard上
    tf.summary.scalar('loss', loss)
    tf.summary.histogram('weight', a)
    tf.summary.scalar('bias_b', b)
    # 合并變量
    merged = tf.summary.merge_all()

    init_op = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init_op)
        print('初始的權重:%f偏置值:%f' % (a.eval(), b.eval()))
        filewriter = tf.summary.FileWriter('/Users/lawa/PycharmProjects/tens/tmp/summary', graph=sess.graph)

        # 訓練優化
        for i in range(1, 350):
            sess.run(train_op)
            # 每訓練一次就收集一次變量
            filewriter.add_summary(sess.run(merged), i)
            print('第%d次優化的權重:%f偏置值:%f' % (i, a.eval(), b.eval()))


if __name__ == '__main__':
    myregression()

           

scalars裡偏置值和loss損失的變化趨勢,可以看到訓練到200步的時候loss就已經很低了,之後的變化很小

Tensorflow可視化功能--tensorboard

graph中的計算圖,data,model等就是我們定義的變量作用域

Tensorflow可視化功能--tensorboard

distributions和histograms裡的權重變化,由于histograms是多元的,看起來可能不是很清楚

Tensorflow可視化功能--tensorboard
Tensorflow可視化功能--tensorboard