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

TensorFlow —— Demo的更多相关文章

  1. android应用市场、社区客户端、漫画App、TensorFlow Demo、歌词显示、动画效果等源码

    Android精选源码 MVP架构Android应用市场项目 android刻度盘控件源码 Android实现一个社区客户端 android商品详情页上拉查看详情 基于RxJava+Retrofit2 ...

  2. cnn汉字识别 tensorflow demo

    # -*- coding: utf-8 -*- import tensorflow as tf import os import random import tensorflow.contrib.sl ...

  3. TensorFlow 在android上的Demo(1)

    转载时请注明出处: 修雨轩陈 系统环境说明: ------------------------------------ 操作系统 : ubunt 14.03 _ x86_64 操作系统 内存: 8GB ...

  4. TensorFlow Lite demo——就是为嵌入式设备而存在的,底层调用NDK神经网络API,注意其使用的tf model需要转换下,同时提供java和C++ API,无法使用tflite的见后

    Introduction to TensorFlow Lite TensorFlow Lite is TensorFlow’s lightweight solution for mobile and ...

  5. YOLO2:实时目标检测视频教程,视频演示, Android Demo ,开源教学项目,论文。

    实时目标检测和分类 GIF 图: 视频截图: 论文: https://arxiv.org/pdf/1506.02640.pdf https://arxiv.org/pdf/1612.08242.pdf ...

  6. 学习笔记TF066:TensorFlow移动端应用,iOS、Android系统实践

    TensorFlow对Android.iOS.树莓派都提供移动端支持. 移动端应用原理.移动端.嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应:二在本地运行模型, ...

  7. 移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

    承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化 ...

  8. Distributed TensorFlow

    Distributed TensorFlow Todo list: Distributed TensorFlow简介 Distributed TensorFlow的部署与运行 对3个台主机做多卡GPU ...

  9. darkflow测试和训练yolo

    转自 https://blog.csdn.net/u011961856/article/details/76582669参考自github:https://github.com/thtrieu/dar ...

随机推荐

  1. Java基础总结--数组

    ---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...

  2. js 判断当前是什么浏览器

    function getExplorer() { var explorer = window.navigator.userAgent; //ie if (explorer.indexOf(" ...

  3. angular之scope详解

    AngularJS的一些指令会创建子作用域,而子作用域会继承自父作用域,大致可分为以下3种 1.创建子作用域并继承父作用域的指令 ng-repeat ng-include ng-switch ng-c ...

  4. 计数排序(O(n+k)的排序算法,空间换时间)

    计数排序就是利用空间换时间,时间复杂度O(n+k) n是元素个数,k是最大数的个数: 统计每个数比他小的有多少,比如比a[i]小的有x个,那么a[i]应该排在x+1的位置 代码: /* * @Auth ...

  5. 2017广东工业大学程序设计竞赛决赛-tmk买礼物

    tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店 ...

  6. Problem G

    Problem Description A relay is a race for two or more teams of runners. Each member of a team runs o ...

  7. 使用Identity Server 4建立Authorization Server (2)

    第一部分: http://www.cnblogs.com/cgzl/p/7780559.html 第一部分主要是建立了一个简单的Identity Server. 接下来继续: 建立Web Api项目 ...

  8. Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法

    相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x97\xa0\xe5\x90\x8d' 的编码,直接s.decode()是无法解决编码问题.尝试了无数办法,都无法 ...

  9. 【转载】SQL注入

             "SQL注入"是一种利用未过滤/未审核用户输入的攻击方法("缓存溢出"和这个不同),意思就是让应用运行本不应该运行的SQL代码.如果应用毫无防 ...

  10. Grunt打包seajs项目

    在使用seajs时,常常将若干脚本分为多次require进来,这样开发中比较方便,但是,会增加http请求次数,在生产环境中需要进行打包合并.压缩等操作. 以Grunt构建工具为例,对一个seajs项 ...