博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow Tensorboard可视化-【老鱼学tensorflow】
阅读量:4946 次
发布时间:2019-06-11

本文共 3235 字,大约阅读时间需要 10 分钟。

tensorflow自带了可视化的工具:Tensorboard。有了这个可视化工具,可以让我们在调整各项参数时有了可视化的依据。

本次我们先用Tensorboard来可视化Tensorflow的结构。

在输出tensorflow结构的关键步骤是:

writer = tf.summary.FileWriter("E:/todel/data/tensorflow", sess.graph)

这个函数中把当前的tensorflow的结构图输出到指定的目录下。

而为了能够使输出的结构能够有一定的分组,可以使用:

with tf.name_scope("xxx"):

只要用tf.name_scope()包含起来的代码就会分在一组中显示。

因此全部的示例代码如下:

import tensorflow as tfimport matplotlib.pyplot as pltdef add_layer(inputs, in_size, out_size, activation_function=None):    """    添加层    :param inputs: 输入数据    :param in_size: 输入数据的列数    :param out_size: 输出数据的列数    :param activation_function: 激励函数    :return:    """    # 定义权重,初始时使用随机变量,可以简单理解为在进行梯度下降时的随机初始点,这个随机初始点要比0值好,因为如果是0值的话,反复计算就一直是固定在0中,导致可能下降不到其它位置去。    with tf.name_scope('layer'):        with tf.name_scope('weights'):            Weights = tf.Variable(tf.random_normal([in_size, out_size]), name='W')        with tf.name_scope('biases'):            # 偏置shape为1行out_size列            biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='b')        with tf.name_scope("Wx_plus_b"):            # 建立神经网络线性公式:inputs * Weights + biases,我们大脑中的神经元的传递基本上也是类似这样的线性公式,这里的权重就是每个神经元传递某信号的强弱系数,偏置值是指这个神经元的原先所拥有的电位高低值            Wx_plus_b = tf.matmul(inputs, Weights) + biases        if activation_function is None:            # 如果没有设置激活函数,则直接就把当前信号原封不动地传递出去            outputs = Wx_plus_b        else:            # 如果设置了激活函数,则会由此激活函数来对信号进行传递或抑制            outputs = activation_function(Wx_plus_b)        return outputsimport numpy as np# 创建一列(相当于只有一个属性值),300行的x值,这里np.newaxis用于新建出列数据,使其shape为(300, 1)x_data = np.linspace(-1, 1, 300)[:,np.newaxis]# 增加噪点,噪点的均值为0,标准差为0.05,形状跟x_data一样noise = np.random.normal(0, 0.05, x_data.shape)# 定义y的函数为二次曲线的函数,但同时增加了一些噪点数据y_data = np.square(x_data) - 0.5 + noise# 定义输入值,这里定义输入值的目的是为了能够使程序比较灵活,可以在神经网络启动时接收不同的实际输入值,这里输入的结构为输入的行数不国定,但列就是1列的值with tf.name_scope("inputs"):    xs = tf.placeholder(tf.float32, [None, 1], name='x_input')    ys = tf.placeholder(tf.float32, [None, 1], name='y_input')# 定义一个隐藏层,输入为xs,输入size为1列,因为x_data就只有1个属性值,输出size我们假定输出的神经元有10个神经元的隐藏层,激励函数用relul1 = add_layer(xs, 1, 10, tf.nn.relu)# 定义输出层,输入为l1,输入size为10列,也就是l1的列数,输出size为1,因为这里直接输出为类似y_data了,因此为1列,假定没有激励函数,也就是输出是啥就直接传递出去了。predition = add_layer(l1, 10, 1, activation_function=None)with tf.name_scope("loss"):    # 定义损失函数为差值平方和的平均值    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - predition), axis=1))with tf.name_scope("train"):    # 进行逐步优化的梯度下降优化器,学习效率为0.1,以最小化损失函数的方式进行优化    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)# 初始化所有定义的变量init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)writer = tf.summary.FileWriter("E:/todel/data/tensorflow", sess.graph)# 学习1000次for i in range(1000):    sess.run(train_step, feed_dict={xs:x_data, ys:y_data})    # 打印期间的误差值,看这个误差值是否在减少    if i % 50 == 0:        # print(sess.run(loss, feed_dict={xs:x_data, ys:y_data}))        prediction_value = sess.run(predition, feed_dict={xs:x_data, ys:y_data})

执行以上代码后,会在指定的目录下生成相应的结构文件,而为了能够查看此文件,可以在命令行中输入:

tensorboard --logdir tensorflow

当然,上面的logdir根据读者自己设置的目录结构名来确定。

执行上面的命令后,会打印一个可以在浏览器中输入的URL,输入这个URL就会显示相应的tensorflow结构图:
544412-20171211172707602-147230498.png

大家也可以自己尝试一下如果不输入那些烦人的tf.name_scope()进行分组而直接用 tf.summary.FileWriter进行输出其结构图是长啥样的。

转载于:https://www.cnblogs.com/dreampursuer/p/8024176.html

你可能感兴趣的文章
压deadline的 py-Four fundamental operations of recursion
查看>>
python基础 文件操作
查看>>
量化自我—趋势还是忽悠
查看>>
SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7
查看>>
大半夜的很无聊,想写个计算机的遥控器
查看>>
△POJ1328--Radar Installation(贪心)
查看>>
数据结构实验7:实现二分查找、二叉排序(查找)树和AVL树
查看>>
JAVA正则表达式:Pattern类与Matcher类详解(转)
查看>>
ls -alrth 及ls 详解
查看>>
C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]
查看>>
我试试能不能用latex
查看>>
跨浏览器实现自定义事件处理
查看>>
LeetCode 303. Range Sum Query - Immutable
查看>>
Oracle存储过程编译卡死的解决方法
查看>>
将HTML转换为图片(PNG,JPGE)
查看>>
集群、负载均衡、分布式
查看>>
SDOI10 古代猪文题解
查看>>
Codeforces Round #517(Div2) A.Golden Plate
查看>>
JAVA中Date类的使用
查看>>
JS 获取各个偶数之和!!
查看>>