2021-04-12
一直不知道怎么调试tensorflow模型,怎么样算好,遇到问题怎么办,目前还不知道怎么解决,听说tensorboard在调试过程种有很好的效果,花了一天时间了解学习。
本文主要讨论常用的几个应用:
1)怎么查看模型图及保存
2)添加 scalar 、 添加image 、 添加histogram到日志中
1)怎么查看模型图及保存(tensorboard最简单的使用)
import tensorflow as tf
a = tf.constant(1.0)
b = a+1
# #生成一个写日志的writer,并将当前的tensorflow计算图写入日志
# 不存在目录,则创建该目录
writer = tf.summary.FileWriter('./result/logs',tf.get_default_graph()) # tensorboard足够识别本图
tensorboard --logdir .
2)添加 scalar 、 添加image 、 添加histogram到日志中
import tensorflow as tf
import cv2
# scalar
with tf.name_scope('scalar'):
c = tf.Variable(1.0,name='c')
assign_op = tf.assign_add(c,2.0)
tf.summary.scalar('c_summary',c) #记录标量
tf.summary.scalar('c_summary_1', c) # 新建窗口,记录标量
with tf.name_scope('scalar1'):
tf.summary.scalar('c_summary', c) # 新建窗口,记录标量
# image
# tf.summary.image(name, tensor) tensor必须为4-D
with tf.name_scope('image'):
img = cv2.imread('view-2-large.png',)
img = img.reshape(1,img.shape[0],img.shape[1],img.shape[2])
img_tensor = tf.constant(img,dtype=tf.uint8)
tf.summary.image('img',img_tensor)
tf.summary.image('img_1',img_tensor)
# histogram
# tf.summary.histogram(name, values)
# 横坐标:values的分布范围
# 纵坐标:训练次数(图形种曲线的颜色由后至前逐步变浅,表示训练的次数逐步增加)
with tf.name_scope('histogram'):
value = tf.random_normal(shape=[1000,],mean=0.0,stddev=1.0,seed=0)
tf.summary.histogram('hist',value)
tf.summary.histogram('hist1',value)
# #生成一个写日志的writer,并将当前的tensorflow计算图写入日志
# 不存在目录,则创建该目录
writer = tf.summary.FileWriter('./result/logs',tf.get_default_graph()) # tensorboard足够识别本图
# log_device_placement:打印日志
# allow_soft_placement:允许自动分配存在的设备给操作,解决手动分配设备的错误问题。
config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)
with tf.Session(config=config) as sess:
tf.global_variables_initializer().run()
#汇总所有的summary
merged = tf.summary.merge_all() #merge_all
for i in range(200):
c_out,value_out,summary = sess.run([assign_op,value,merged]) #执行merged
print('c_out:%f,step:%d'%(c_out,i))
writer.add_summary(summary,global_step=i) #
步骤:
1、将想要保存的scalar,image,histogram使用tf.summary.xxx方法设置操作
2、merged = tf.summary.merge_all()汇总所有操作
3、sess.run(merged) 执行merged操作
4、writer.add_summary() 将每次训练的结果加入到日志中
注意:
1、不同name_scope绘制不同的图,比如scalar相关的曲线名称为 scalar1/c_summary、scalar/c_summary、scalar/c_summary_1