TensorFlow —— Demo

简介: import tensorflow as tfg = tf.Graph() # 创建一个Graph对象在模型中有两个“全局”风格的Variable对象:global_step 和 total_output 。
import tensorflow as tf
g = tf.Graph()  # 创建一个Graph对象

在模型中有两个“全局”风格的Variable对象:global_steptotal_output 。它们本质上是全局的,因此在声明它们时需要与数据流图的其他节点区分开,并把它们放入自己的名称作用域。trainable= False的设置使得该Variable对象对象不会对模型造成影响(因为没有任何训练的步骤),但该设置明确指定了这些Variable对象只能通过手工设置。

shapeNone 代表流经边的张量为任意长度的向量;
shape[] 代表流经边的张量为一个标量。

构建数据流图

with g.as_default():   # 将 Graph对象 设为默认 Graph对象
    with tf.name_scope('variables'):
        # 记录数据流图运行次数的 Variable 对象
        # 这是一种常见的范式,在整个API中,这种范式会频繁出现
        global_step = tf.Variable(0, dtype= tf.float32, trainable= False, name= 'global_step')
        
        # 追踪该模型的所有输出随时间的累加和的 Variable 对象
        total_output = tf.Variable(0.0, dtype= tf.float32, trainable= False, name= 'total_output')
        
    with tf.name_scope('transformation'):  # 该模型的核心变换部分
        
        # 独立的输入层
        with tf.name_scope('input'):
            # 创建输出占位符,用于接收任意长度的向量
            a = tf.placeholder(tf.float32, shape= [None], name= 'input_placeholder_a')
            
        # 独立的中间层
        with tf.name_scope('intermediate_layer'):
            # 对整个向量实施乘法和加法
            b = tf.reduce_prod(a, name= 'prod_b')
            c = tf.reduce_sum(a, name= 'sum_c')
            
        # 独立的输出层
        with tf.name_scope('output'):
            output = tf.add(b, c, name= 'output')
        
        # 对变量进行更新
        with tf.name_scope('update'):
            # 用最新的输出更新Variable对象total_output
            update_total = total_output.assign(output)
            # 将Variable对象global_step增 1 ,只要数据流图运行,该操作便需要进行
            increment_step = global_step.assign_add(1)
            
        with tf.name_scope('summaries'):
            avg = tf.div(update_total, tf.cast(increment_step, tf.float32), name= 'average')
            
            # 为输出节点创建汇总数据
            tf.summary.scalar('Output', output)
            tf.summary.scalar('Sum of outputs over time', update_total)
            tf.summary.scalar('Average of outputs over time', avg)
            
        with tf.name_scope('global_ops'):
            # 初始化Op
            init = tf.global_variables_initializer()
            # 将所有汇总数据合并到一个Op中
            merged_summaries = tf.summary.merge_all()
INFO:tensorflow:Summary name Sum of outputs over time is illegal; using Sum_of_outputs_over_time instead.
INFO:tensorflow:Summary name Average of outputs over time is illegal; using Average_of_outputs_over_time instead.

为什么将 tf.summary.merge_all() \(Op\) 放在 “\(global\_ops\)” 名称作用域,而非放在 “\(summaries\)” 作用域?

  • 一般而言,将tf.summary.merge_all() 与其他全局\(Op\)放在一起是最佳做法。我们的数据流图只为汇总数据设置了一个环节,但这并不妨碍去想象一个拥有VariableOp和名称作用域等的不同汇总数据的数据流图。通过保持 tf.summary.merge_all() 的分离,可确保用户无需记忆放置它的特定“summary” 代码块,从而比较容易找到该\(Op\)

运行数据流图

sess = tf.Session(graph= g)
# 保存汇总数据
writer = tf.summary.FileWriter('E:/Graphs/xin_graph', g)
sess.run(init)
def run_graph(input_tensor):
    '''
    运行计算图
    '''
    feed_dict = {a: input_tensor}
    _, step, summary = sess.run([output, increment_step, merged_summaries],feed_dict= feed_dict)

    writer.add_summary(summary, global_step= 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()
sess.close()

关于Tensorboard

Tensorboard踩坑记:https://zhuanlan.zhihu.com/p/29284886

探寻有趣之事!
目录
相关文章
|
机器学习/深度学习 Java 物联网
Android TensorFlow Lite 初探 数字分类器(JAVA DEMO)
Android TensorFlow Lite 初探 数字分类器(JAVA DEMO)
241 0
Android TensorFlow Lite 初探 数字分类器(JAVA DEMO)
|
编解码 算法 TensorFlow
详解上采样的两种常用方法(附以TensorFlow 2.x实现的小demo)
详解上采样的两种常用方法(附以TensorFlow 2.x实现的小demo)
详解上采样的两种常用方法(附以TensorFlow 2.x实现的小demo)
|
存储 人工智能 Java
TensorFlow Lite for Android 初探(附demo)
TensorFlow Lite for Android 初探(附demo)
436 0
TensorFlow Lite for Android 初探(附demo)
|
3月前
|
机器学习/深度学习 人工智能 API
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
69 0
|
3月前
|
机器学习/深度学习 存储 人工智能
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(3)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(3)
81 0
|
3月前
|
机器学习/深度学习 Dart TensorFlow
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
71 0
|
8天前
|
机器学习/深度学习 运维 监控
TensorFlow分布式训练:加速深度学习模型训练
【4月更文挑战第17天】TensorFlow分布式训练加速深度学习模型训练,通过数据并行和模型并行利用多机器资源,减少训练时间。优化策略包括配置计算资源、优化数据划分和减少通信开销。实际应用需关注调试监控、系统稳定性和容错性,以应对分布式训练挑战。
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
Python中的深度学习:TensorFlow与PyTorch的选择与使用
Python中的深度学习:TensorFlow与PyTorch的选择与使用
|
2月前
|
机器学习/深度学习 数据可视化 TensorFlow
基于tensorflow深度学习的猫狗分类识别
基于tensorflow深度学习的猫狗分类识别
63 1
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
【TensorFlow】深度学习框架概述&TensorFlow环境配置
【1月更文挑战第26天】【TensorFlow】深度学习框架概述&TensorFlow环境配置

热门文章

最新文章