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

版权声明:本文为博主原创文章,未经许可,请勿转载 https://blog.csdn.net/liweibin1994/article/details/78310273

一般在训练神经网络的时候,参数很多,也很复杂,有时我们就想把训练过程的一些数据进行可视化,方便我们调参。比如,如果我们可以看到神经网络训练过程的训练集的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 pd
import numpy as np
import tensorflow as tf
from sklearn import preprocessing as pp
from sklearn import metrics
from sklearn.metrics import roc_auc_score as auc
from dataPreprocessing import *

###---------build model
X = 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)

#存储cost
tf.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次或者几百次才记录一次数据。这样的话比较省硬盘。

猜你喜欢

转载自blog.csdn.net/liweibin1994/article/details/78310273