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是多维的,看起来可能不是很清楚
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值