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])

運行程序生成事件文件
在這裏插入圖片描述
命令行運行

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

如果/Users/lawa/PycharmProjects/tens/tmp/summary裏有多個事件文件,默認選擇最新的一個
在這裏插入圖片描述
界面展示(不同的版本可能佈局不一樣)
在這裏插入圖片描述

  • 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就已經很低了,之後的變化很小
在這裏插入圖片描述
graph中的計算圖,data,model等就是我們定義的變量作用域
在這裏插入圖片描述
distributions和histograms裏的權重變化,由於histograms是多維的,看起來可能不是很清楚
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章