zoukankan      html  css  js  c++  java
  • tensorboard入门

    Tensorboard

    tensorboard用以图形化展示我们的代码结构和图形化训练误差等,辅助优化程序
    tensorboard实际上是tensorflow机器学习框架下的一个工具,需要先安装tensorflow,参考: https://www.cnblogs.com/maskerk/p/9973503.html 的安装过程。

    本文tensorboard功能参考链接:www.cnblogs.com/fydeblog/p/7429344.html

    微代码测试

    代码全文

    import tensorflow as tf 
    
    with tf.name_scope('graph') as scope:
    	a = tf.constant([[3,4]],name = 'a')
    	b = tf.constant([[5],[6]],name = 'b')
    	product = tf.matmul(a,b,name='product')
    
    sess = tf.Session()
    writer = tf.summary.FileWriter('./tensorflow/',sess.graph)
    init = tf.global_variables_initializer()
    sess.run(init)
    

    启动tensorboard

    运行代码之后可以在目录./tensorboard/ 下看到生成了一个文件,用于启动tensorboard。执行tensorboard --logdir ./tensorflow/,打开浏览器127.0.0.1:6006 ,可以看到视图

    注:要保证该文件夹下只有一个文件

    双击graph可以进一步打开,这就是我们这段微代码的结构

    进阶

    这里我们基于之前的一段代码,与tensorboard相结合来看下效果。
    前文链接:https://www.cnblogs.com/maskerk/p/9973503.html

    代码全文

    import tensorflow as tf 
    import matplotlib.pyplot as plt
    import numpy as np
    
    #样本数据
    with tf.name_scope('sample-data'):
    	x_train = np.linspace(-1,1,300)[:,np.newaxis]
    	noise = np.random.normal(0, 0.1, x_train.shape)
    	y_train = x_train * 3 + noise + 0.8
    
    #
    with tf.name_scope('hold-data'):
    	x = tf.placeholder(tf.float32, [None, 1])
    	y = tf.placeholder(tf.float32, [None, 1])
    
    #线性模型
    with tf.name_scope('line-model'):
    	W = tf.Variable([0.1],dtype = tf.float32,name='W')
    	#添加变量W到tensorboard的Distributions下
    	tf.summary.histogram('Weight',W)
    	b = tf.Variable([0.1],dtype = tf.float32,name='b')
    	line_model = W * x + b
    	#添加变量b到tensorboard的Distributions下
    	tf.summary.histogram('bias',b)
    
    #损失模型
    with tf.name_scope("loss-model"):
    	loss = tf.reduce_sum(tf.square(line_model - y))
    	#添加变量loss到tensorboard的Scalars下
    	tf.summary.scalar("loss",loss)
    	
    
    #创建优化器
    with tf.name_scope("optimizer-model"):
    	optimizer = tf.train.GradientDescentOptimizer(0.001)
    	train = optimizer.minimize(loss)
    
    #初始化变量
    with tf.name_scope("init-model"):
    	init = tf.global_variables_initializer()
    	sess = tf.Session()
    	sess.run(init)
    
    # 绘制样本数据
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.scatter(x_train, y_train)
    plt.ion()
    plt.show()
    plt.pause(1)
    
    #将所有的summary全部保存磁盘
    merged = tf.summary.merge_all()
    
    #tensorboard所需数据写入文件
    writer = tf.summary.FileWriter('./tensorflow/',sess.graph)
    
    #训练100次
    for i in range(100):
    	if i % 10 == 0:
    		#每隔10次打印1次成果
    		print(i)
    		print('W:%s  b:%s' % (sess.run(W),sess.run(b)))
    		print('loss:%s' % (sess.run(loss,{x:x_train,y:y_train})))
    
    		#绘制拟合直线
    		try:
    			ax.lines.remove(lines[0])
    		except Exception:
    			pass
    		lines = ax.plot(x_train, sess.run(W)*x_train+sess.run(b), 'r-', lw=5)
    		plt.pause(1)
    
    	sess.run(train,{x:x_train,y:y_train})
    
    	#向tensorboard添加数据
    	rs = sess.run(merged,{x:x_train,y:y_train})
    	writer.add_summary(rs,i)
    
    # 打印训练100次后的成果
    print('---')
    print('W:%s  b:%s' % (sess.run(W),sess.run(b)))
    print('loss:%s' % (sess.run(loss,{x:x_train,y:y_train})))
    

    相比前文,这里添加了两部分

    • 1.拟合直线的动态变化图像

    • 2.tensorboard展现数据变化过程

    启动tensorboard

    tensorboard --logdir ./tensorflow/
    

    可以看到loss(误差大小)的变化曲线

    权重值W和偏差b的变化曲线(y = W * x + b)

  • 相关阅读:
    ReverseFind的用法 ; 查找字符中最后一个字符
    sprintf_s() 、sprintf()和printf()区别和用法
    CString/string 区别及其转化
    CC++中strcat()函数
    C++中cstring.h和string.h的区别
    vs中CString的用法,以及所需的头文件
    头文件afx.h作用
    sprintf_s函数用法
    C++ format 函数
    C/C++ typedef用法
  • 原文地址:https://www.cnblogs.com/maskerk/p/9973664.html
Copyright © 2011-2022 走看看