学习笔记 TF007:Tensor、Graph、Op、Variable、占位符、Session、名称作用域、Board 综合例子 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cralison
V2EX    TensorFlow

学习笔记 TF007:Tensor、Graph、Op、Variable、占位符、Session、名称作用域、Board 综合例子

  •  1
     
  •   cralison 2017-05-13 17:45:08 +08:00 2727 次点击
    这是一个创建于 3072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    输入采用占位符,模型接收任意长度向量,随时间计算数据流图所有输出总和,采用名称作用域合理划分数据流图,每次运行保存数据流图输出、累加、均值到磁盘。

    [None]代表任意长度向量,[]代表标量。update 环节更新各 Variable 对象以及将数据传入 TensorBoard 汇总 Op。与交换工作流分开,独立名称作用域包含 Variable 对象,存储输出累加和,记录数据流图运行次数。独立名称作用域包含 TensorBoard 汇总数据,tf.scalar_summary Op。汇总数据在 Variable 对象更新完成后才添加。

    构建数据流图。 导入 TensorFlow 库。Graph 类构造方法 tf.Graph(),显式创建 Graph 对象。两个“全局” Variable 对象,追踪模型运行次数,追踪模型所有输出累加和。与其他节点区分开,放入独立名称作用域。trainable=False 设置明确指定 Variable 对象只能手工设置。 模型核心的变换计算,封装到名称作用域"transformation",又划分三个子名称作用域"input"、"intermediate_layer"、"output"。.multiply、.add 只能接收标量参数,.reduce_prod、. reduce_sum 可以接收向量参数。 在"update"名称作用域内更新 Variable 对象。.assign_add 实现 Variable 对象递增。 在"summaries"名称作用域内汇总数据供 TensorBoard 用。.cast()做数据类型转换。.summary.scalar()做标量数据汇总。 在"global_ops"名称作用域创建全局 Operation(Op)。初始化所有 Variable 对象。合并所有汇总数据。

    运行数据流图。 .Session()启动 Session 对象,graph 属性加载 Graph 对象,.summary.FileWriter()启动 FileWriter 对象,保存汇总数据。 初始化 Variable 对象。 创建运行数据流图辅助函数,传入向量,运行数据流图,保存汇总数据。创建 feed_dict 参数字典,以 input_tensor 替换 a 句柄的 tf.placeholder 节点值。使用 feed_dict 运行 output 不关心存储,运行 increment_step 保存到 step,运行 merged_summaries Op 保存到 summary。添加汇总数据到 FileWriter 对象,global_step 参数随时间图示折线图横轴。 变换向量长度多次调用运行数据流图辅助函数。.flush()把汇总数据写入磁盘。

    查看数据流图。 Graph 标签,变换运算流入 update 方框,为 summaries、variables 提供输入,global_ops 包含变换计算非关键运算。输入层、中间层、输出层分离。 Scalars 标签,summary.scalar 对象标签查看不同时间点汇总数据变化。

    import tensorflow as tf#导入 TensorFlow 库 #构建数据流图 graph = tf.Graph()#显式创建 Graph 对象 with graph.as_default():#设为默认 Graph 对象 with tf.name_scope("variables"):#创建 Variable 对象名称作用域 global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step")#记录数据流图运行次数的 Variable 对象,初值为 0,数据类型为 32 位整型,不可自动修改,以 global_step 标识 total_output = tf.Variable(0.0, dtype=tf.float32, trainable=False, name="total_output")#追踪模型所有输出累加和的 Variable 对象,初值为 0.0,数据类型为 32 位浮点型,不可自动修改,以 total_output 标识 with tf.name_scope("transformation"):#创建变换计算 Op 名称作用域 with tf.name_scope("input"):#创建独立输入层名称作用域 a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")#创建占位符,接收一个 32 位浮点型任意长度的向量作为输入,以 input_placeholder_a 标识 with tf.name_scope("intermediate_layer"):#创建独立中间层名称作用域 b = tf.reduce_prod(a, name="product_b")#创建创建归约乘积 Op,接收张量输入,输出张量所有分量(元素)的乘积,以 product_b 标识 c = tf.reduce_sum(a, name="sum_c")#创建创建归约求和 Op,接收张量输入,输出张量所有分量(元素)的求和,以 sum_c 标识 with tf.name_scope("output"):#创建独立输出层名称作用域 output = tf.add(b, c, name="output")#创建创建求和 Op,接收两个标量输入,输出标量求和,以 output 标识 with tf.name_scope("update"): update_total = total_output.assign_add(output)#用最新的输出更新 Variable 对象 total_output increment_step = global_step.assign_add(1)#增 1 更新 Variable 对象 global_step,记录数据流图运行次数 with tf.name_scope("summaries"):#创建数据汇总 Op 名称作用域 avg = tf.div(update_total, tf.cast(increment_step, tf.float32), name="average")#计算平均值,输出累加和除以数据流图运行次数,把运行次数数据类型转换为 32 位浮点型,以 average 标识 tf.summary.scalar(b'output_summary',output)#创建输出节点标量数据统计汇总,以 output_summary 标识 tf.summary.scalar(b'total_summary',update_total)#创建输出累加求和标量数据统计汇总,以 total_summary 标识 tf.summary.scalar(b'average_summary',avg)#创建平均值标量数据统计汇总,以 average_summary 标识 with tf.name_scope("global_ops"):#创建全局 Operation(Op)名称作用域 init = tf.global_variables_initializer()#创建初始化所有 Variable 对象的 Op merged_summaries = tf.summary.merge_all()#创建合并所有汇总数据的 Op #运行数据流图 sess = tf.Session(graph=graph)#用显式创建 Graph 对象启动 Session 会话对象 writer = tf.summary.FileWriter('./improved_graph', graph)#启动 FileWriter 对象,保存汇总数据 sess.run(init)#运行 Variable 对象初始化 Op def run_graph(input_tensor):#定义数据注图运行辅助函数 """ 辅助函数:用给定的输入张量运行数据流图, 并保存汇总数据 """ feed_dict = {a: input_tensor}#创建 feed_dict 参数字典,以 input_tensor 替换 a 句柄的 tf.placeholder 节点值 _, step, summary = sess.run([output, increment_step, merged_summaries], feed_dict=feed_dict)#使用 feed_dict 运行 output 不关心存储,运行 increment_step 保存到 step,运行 merged_summaries Op 保存到 summary writer.add_summary(summary, global_step=step)#添加汇总数据到 FileWriter 对象,global_step 参数时间图示折线图横轴 #用不同的输入用例运行数据流图 run_graph([2,8]) run_graph([3,1,3,3]) run_graph([8]) run_graph([1,2,3]) run_graph([11,4]) run_graph([4,1]) run_graph([7,3,1]) run_graph([6,3]) run_graph([0,2]) run_graph([4,5,6]) writer.flush()#将汇总数据写入磁盘 writer.close()#关闭 FileWriter 对象,释放资源 sess.close()#关闭 Session 对象,释放资源 

    WX20170513-142835@2x.png graph?run=-8.png graph?run=-9.png

    参考资料: 《面向机器智能的 TensorFlow 实践》

    欢迎加我微信交流:qingxingfengzi

    我的微信公众号:qingxingfengzigz

    我老婆张幸清的微信公众号:qingqingfeifangz

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2948 人在线   最高记录 6679   span class="snow">     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:40 PVG 21:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86