2022-02-20
先学几个英文单词
总结,总结
范围范围
这是我很久以前做的一个笔记,后来我有博客的时候发表了。有些内容老了,懒得改了。
先解释一下整体流程
暂时不管你怎么编程,假设你已经有了下面的代码,可执行。
# encoding:utf-8 import tensorflow as tf print('version:', tf.__version__) foo = tf.Variable(3, name='foo') bar = tf.Variable(2, name='bar') result = tf.add(foo, bar, name='add') # 初始化变量 init = tf.global_variables_initializer() # 启动图 (graph) sess = tf.Session() sess.run(init) res = sess.run(result) print('result:', res) train_writer = tf.summary.FileWriter('log2', sess.graph)
可视化,先感性理解
可视化简要步骤
1.运行代码
// 至此,log2中已经生成了文件
2.启动可视化器,两种方式
一个。找到下面的.py文件,运行文件,.py –=…../log2/ 注意这里的路径要和代码中的路径一致(这是老版本)
湾。直接运行 –host=10.10.101.2 –port=6099 –=””
// .exe文件,和.exe在同一个路径
// 无需额外安装,安装完成后会自动安装
//端口主机可选
// 不带引号的目录
3. 在浏览器中访问:6006,点击查看
4. 注意每次运行代码都需要重启工具
详细说明
1. 数据序列化
tf可视化其实是将操作数据序列化到本地,然后使用浏览器加载数据
这个本地文件称为“事件文件”,由
weights = tf.Variable(tf.random_normal([3,2]), name='w') sess = tf.Session() writer = tf.summary.FileWriter('log2', sess.graph) # 序列化
两个参数,第一个参数是序列化地址,第二个参数是可选的。如果输入此参数,将显示图像。
2. 名称的范围
tf.() 会创建一个作用域,作用域下的变量名会加上作用域的名字
with tf.name_scope('test'): weights = tf.Variable(tf.random_normal([3,2]), name='w') sess = tf.Session() writer = tf.summary.FileWriter('log2', sess.graph)
以上两步基本就可以实现绘图了。
但可视化不仅仅是绘画
3.可视化
1. 是那些变量,序列化并存储在本地
// 通过将操作附加到节点来输出变量
2. 是一个图,图中只有网络结构,没有数据
3. 是直方图,将数据绘制为直方图
// 通过向节点附加操作来输出直方图
其实这是先存储数据,然后再进行可视化,所以还需要在绘画中执行,所以如果要输出很多数据,需要在中一个一个输出,也就是很麻烦
tf 提供了一个合并操作,就是将这些输出进行合并,在会话中一次性全部输出。接口 tf.()
# coding:utf-8 import tensorflow as tf import numpy as np # 此代码仅用于可视化 x_data = np.random.rand(100).astype("float32") with tf.name_scope('y_data'): y_data = x_data * 2.5 + 0.8 # tf.histogram_summary("method_demo"+"/y_data",y_data) tf.summary.histogram("method_demo"+"/y_data",y_data) with tf.name_scope('W'): W = tf.Variable(tf.random_uniform([1], -200.0, 200.0)) tf.summary.histogram("method_demo"+"/W",W) with tf.name_scope('b'): b = tf.Variable(tf.zeros([1])) tf.summary.histogram("method_demo"+"/b",b) with tf.name_scope('y'): y = W * x_data + b tf.summary.histogram("method_demo"+"/y",y) # 最小化均方 with tf.name_scope('loss'): loss = tf.reduce_mean(tf.square(y - y_data)) tf.summary.histogram("method_demo"+"/loss",loss) tf.summary.scalar("method_demo222"+'loss',loss) optimizer = tf.train.GradientDescentOptimizer(0.7) with tf.name_scope('train'): train = optimizer.minimize(loss) init = tf.global_variables_initializer() sess = tf.Session() #合并到Summary中 merged = tf.summary.merge_all() #选定可视化存储目录 writer = tf.summary.FileWriter('log2',sess.graph) sess.run(init) # 开始计算 for step in range(500): sess.run(train) # tf.histogram_summary('method_demo'+'/train',train) if step % 5 == 0: print(step, "W:",sess.run(W),"b:", sess.run(b)) result = sess.run(merged) #merged也是需要run的 writer.add_summary(result,step) #result是summary类型 (result 纵坐标 step 横坐标)
运行,可以在浏览器中访问
异常记录
1.(见上文):您必须使用 dtype float 和 shape [100,1] 为 ‘input/’ 提供一个值
这个问题我查了很久,各种答案,都是无效的。请参阅解决方案的代码。
# 以下皆可 merged = tf.summary.merge_all() # merged = tf.summary.merge([loss_scalar]) writer = tf.summary.FileWriter('logs', sess.graph) sess.run(init) for i in range(1000): loss2, _ = sess.run([loss, optimizer], feed_dict={input_x:x[:, np.newaxis], input_y:y[:, np.newaxis]}) # result = sess.run(merged) # 这样写报错 # InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'input/input_y' with dtype float and shape [100,1] result = sess.run(merged, feed_dict={input_x:x[:, np.newaxis], input_y:y[:, np.newaxis]}) writer.add_summary(result, i)
需要喂参数
参考:
分类:
技术要点:
相关文章:
暂无评论内容