tensorflow之可视化工具tesorboard的简单使用

来源:互联网 发布:log4j sql日志级别 编辑:程序博客网 时间:2024/06/17 05:25

一般在训练神经网络的时候,参数很多,也很复杂,有时我们就想把训练过程的一些数据进行可视化,方便我们调参。比如,如果我们可以看到神经网络训练过程的训练集的loss变化情况以及测试集的loss变化情况,通过这两条曲线我们就可以大致判断我们的网络是否已经过拟合了。所以说,可视化对我们调参的帮助还是挺大的。而深度学习框架tensorflow就自带了一款可视化工具tensorboard来方便 TensorFlow 程序的理解、调试与优化。现在我们就来看看它的使用方式。

tensorboard运行方式

TensorBoard 是通过读取 TensorFlow 的事件文件来运行。文件大概是长这个样子:
这里写图片描述


如何得到这样的文件

假如我现在在训练一个简单的神经网络,我想要将损失函数的数据记录下来:

cost = -tf.reduce_mean(10*Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))tf.summary.scalar('cost',cost)

tf.summary.scalar()函数就是将想要记录下来的节点作为参数传给它(第二个参数),第一个参数是起了个名字而已。所以,如果还有其它的节点要记录下来,就可以同样使用这个函数。这说明你想把这个节点的运算结果保存下来,但是在tensorflow中,如果不使用tf.Session().run()的话,是不会执行的任何计算的。但是如果我想要记录的节点有很多个,每一个都手动去使用run来运行的话很麻烦。因此可以使用tf.merge_all_summaries()合并为一个操作。

# 收集所有的数据merged = tf.summary.merge_all()

接下来就要指明你要把数据存放在哪里了。

# 指明数据保存路径train_writer = tf.summary.FileWriter("../log/train", sess.graph)

现在,就可以通过运行神经网络并把数据保存下来了!

#计算结果train_result= sess.run(merged,feed_dict = {X:x_data, Y:y_data})#将结果写入磁盘train_writer.add_summary(train_result,epoch)  

完整的代码如下:

import pandas as pdimport numpy as npimport tensorflow as tffrom sklearn import preprocessing as ppfrom sklearn import metricsfrom sklearn.metrics import roc_auc_score as aucfrom dataPreprocessing import *###---------build modelX = tf.placeholder(tf.float32,[None, x_dim], name='X')Y = tf.placeholder(tf.float32,[None, 1], name='Y')W1 = tf.Variable(tf.random_normal([x_dim,64]), name='weight1')W2 = tf.Variable(tf.random_normal([64, 32]), name='weight2')W3 = tf.Variable(tf.random_normal([32, 1]), name='weight3')b1 = tf.Variable(tf.random_normal([1,64]), name='bias1')b2 = tf.Variable(tf.random_normal([1,32]), name='bias2')b3 = tf.Variable(tf.random_normal([1,1]), name='bias3')Wx_b1 = tf.matmul(X, W1) + b1#Wx_b1 = tf.nn.dropout(Wx_b1, keep_prob=1)layer1 = tf.sigmoid(Wx_b1)Wx_b2 = tf.matmul(layer1, W2) + b2#Wx_b2 = tf.nn.dropout(Wx_b2, keep_prob=1)layer2 = tf.sigmoid(Wx_b2)hypothesis = tf.sigmoid(tf.matmul(layer2, W3) + b3)cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))train = tf.train.AdamOptimizer(learning_rate=0.01).minimize(cost)#存储costtf.summary.scalar('cost',cost)# 收集所有的数据merged = tf.summary.merge_all()# 将数据写入到tensorboard中train_writer = tf.summary.FileWriter("../log/train", sess.graph)sess = tf.Session()sess.run(tf.global_variables_initializer())for epoch in range(201):    pred,cost_val,_ = sess.run([hypothesis,cost,train],feed_dict = {X:x_data,Y:y_data})    if epoch % 2 ==0:        #计算结果        print('saving cost data')        train_result= sess.run(merged,feed_dict = {X:x_data, Y:y_data})         #将结果写入磁盘        train_writer.add_summary(train_result,epoch)

一般来说,如果每一次迭代都把数据保存下来,那么等到训练完之后,数据可能会很多,一般是迭代100次或者几百次才记录一次数据。这样的话比较省硬盘。

阅读全文
0 0
原创粉丝点击