文档章节

小白学Tensorflow之可视化与图

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:27
字数 1200
阅读 5
收藏 0
点赞 0
评论 0

Tensorflow提供了很强大的可视化功能,今天来学习一下。
当我们导入tensorflow包的时候,系统已经帮助我们产生了一个默认的图,它被存在_default_graph_stack中,但是我们没有权限直接进入这个图,我们需要使用tf.get_default_graph()命令来获取图。

>>> graph = tf.get_default_graph()

tensorflow中的图上的节点被称之为operations或者ops。我们可以使用graph.get_operations()命令来获取图中的operations

>>> graph.get_operations()
# []

现在,因为图中没有操作,所以返回的是[]。我们可以向图中添加任何的操作,比如我们先定义一个常量input_value

>>> input_value = tf.constant(1.0)

现在,这个常量作为一个节点被添加到了图中,作为一个operations。现在,我们能发现operations中存在值了。

>>> operations = graph.get_operations()
>>> operations
# [<tensorflow.python.framework.ops.Operation at 0x1185005d0>]
>>> operations[0].node_def
# name: "Const"
# op: "Const"
# attr {
#   key: "dtype"
#   value {
#     type: DT_FLOAT
#   }
# }
# attr {
#   key: "value"
#   value {
#     tensor {
#       dtype: DT_FLOAT
#       tensor_shape {
#       }
#       float_val: 1.0
#     }
#   }
# }

Tensorflow还能做很多非常有意义的事,但是你必须给每个操作都赋予明确的含义,即使只是一个常量。

如果我们查看常量input_value,我们将能看到它只是一个32位的浮点数类型的tensor,维度是零维度。

>>> input_value
# <tf.Tensor 'Const:0' shape=() dtype=float32>

可能你注意到了,我们发现这个操作并没有告诉我们input_value的值是多少。这是为什么呢?因为图graph只是定义了操作operations,但是操作operations只能在session里面执行,但是graphsession是独立创建的。所以,我们上述操作才没有显示input_value的值是多少。如果,我们想知道input_value中具体的值是多少,那么我们需要创建一个session,具体如下:

>>> sess = tf.Session()
>>> sess.run(input_value)
# 1.0

至此,我们已经在图中创建了一个session

接下来,我们创建一个神经元。为了简便,我们只创建一个参数变量,在这里我们不使用常量constant来构建,因为我们希望在后续的计算中,这个权重可以更新,所以我们采用Variable来构建参数变量。

>>> weight = tf.Variable(0.8)

可能,你会认为,你只是添加了一个Variable,那么在图中也只会增加一个操作operations。但是事实上,增加了这个权重,却增加了四个操作。我们能使用以下命令来查看各个operations的名字。

>>> for op in graph.get_operations():
>>>     print op.name
# Const
# Variable/initial_value
# Variable
# Variable/Assign
# Variable/read

我们不会关心每一个操作,但是关心每一个操作的含义是有意义的。

>>> output_value = weight * input_value

现在,你查看图中的操作,发现有六个操作了,其中最后一个操作的名字是mul

>>> op = graph.get_operations()[-1]
>>> op.name
# 'mul'
>>> for op_input in op.inputs:
>>>     print op_input
# Tensor("Variable/read:0", shape=(), dtype=float32)
# Tensor("Const:0", shape=(), dtype=float32)

这个显示说明了,这个乘法操作的数据来源是哪里。

那么,我们怎么执行这个乘法操作呢?我们必须去run这个乘法,才能得到output_value的值。但是,这个操作依赖于一个参数weight。我们告诉Tensorflow这个值得初始值是0.8,但是这个初始化操作还没有在session中执行,我们需要使用tf.initialize_all_variables()来初始化参数变量。

>>> init = tf.initialize_all_variables()
>>> sess.run(init)

执行tf.initialize_all_variables()操作将初始化当前图中的所有参数变量,但是如果你想重新加入一个变量,那么就需要重新执行tf.initialize_all_variables()操作,因为先前的操作不包括初始化新的参数变量。

现在,我们来打印output_value操作。

>>> sess.run(output_value)
# 0.80000001

至此,我们已经能简单的描述一个图了。但是,TensorBoard提供了更加强大的可视化功能,接下来,我们来实现这个可视化功能。
TensorBoard读取操作operations中的每一个名字,然后对每个名字进行操作。比如如下操作:

>>> x = tf.constant(1.0, name = 'input')
>>> w = tf.Variable(0.8, name = 'weight')
>>> y = tf.mul(w, x, name = 'output')

TensorBoard的工作原理是从session创建的一个目录中读取结果。我们能使用SummaryWriter函数将output的结果保存到一个目录下面。

SummaryWriter函数的第一个参数是输出目录的名字,这个目录如果不存在,那么将会被创建。

>>> summary_writer = tf.train.SummaryWriter('log_simple_graph', sess.graph)

那么,我们可以在终端下面使用这个命令。

$ tensorboard --logdir=log_simple_graph

TensorBoard运行这个图在本地的6006端口,即localhost:6006

最后附上一个完整代码,以供学习。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf

x = tf.constant(1.0, name='input')
w = tf.Variable(0.8, name='weight')
y = tf.mul(w, x, name='output')
y_ = tf.constant(0.0, name='correct_value')
loss = tf.pow(y - y_, 2, name='loss')
train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss)

for value in [x, w, y, y_, loss]:
    tf.scalar_summary(value.op.name, value)

summaries = tf.merge_all_summaries()

sess = tf.Session()
summary_writer = tf.train.SummaryWriter('log_simple_stats', sess.graph)

sess.run(tf.initialize_all_variables())
for i in range(100):
    summary_writer.add_summary(sess.run(summaries), i)
    sess.run(train_step)

本文转载自:http://www.jianshu.com/p/5080d45d39da

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
斯坦福tensorflow教程(二) tensorflow相关运算

1.认识下TensorBoard TensorFlow不仅是一个软件库,而是一整套包括TensorFlow、TensorBoard、Tensor Serving在内的软件包。为了更大程度地利用TensorFlow,我们应该了解如何将它们串联起来应...

致Great
05/09
0
0
深度学习框架大战正在进行,谁将夺取“深度学习工业标准”的荣耀?

本文最早发表于本人博客:博客 随着深度学习研究热潮的持续发酵,各种开源深度学习框架层出不穷,其中包括:Caffe、CNTK、MXNet、Neon、TensorFlow、Theano 和 Torch (著名开源深度学习框架 ...

algorithmdog
2016/03/06
0
0
斯坦福tensorflow教程(一) tensorflow概述

课程链接:https://web.stanford.edu/class/cs20si/syllabus.html Tensorflow简介 中文官网 为什么选择tensorflow Python 接口 便捷性/灵活性:可以将计算模型部署到一个或多个桌面、服务器、...

致Great
05/08
0
0
TensorFlow——可视化工具TensorBoard的使用

1、TensorBoard简介 Tensorboard是Tensorflow官方推出了可视化工具,它可以通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态。 TensorBoard 和 TensorFLow 程序跑...

飞天小橘子
05/05
0
0
tensorflow源码分析(二)

2015年11月9日,Google发布深度学习框架TensorFlow并宣布开源,并迅速得到广泛关注,在图形分类、音频处理、推荐系统和自然语言处理等场景下都被大面积推广。TensorFlow系统更新快速,官方文...

tianguiyuyu
05/12
0
0
【干货】史上最全的Tensorflow学习资源汇总,速藏!

一 、Tensorflow教程资源: 1)适合初学者的Tensorflow教程和代码示例:(https://github.com/aymericdamien/TensorFlow-Examples)该教程不光提供了一些经典的数据集,更是从实现最简单的“Hel...

技术小能手
04/16
0
0
史上最全TensorFlow学习资源汇总

来源 悦动智能(公众号ID:aibbtcom) 本篇文章将为大家总结TensorFlow纯干货学习资源,非常适合新手学习,建议大家收藏。 ▌一 、TensorFlow教程资源 1)适合初学者的TensorFlow教程和代码示...

悦动智能
04/12
0
0
《Scikit-Learn与TensorFlow机器学习实用指南》第9章 启动并运行TensorFlow

第9章 启动并运行TensorFlow 来源:ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》翻译项目 译者:@akonwang @WilsonQu 校对:@Lisanaaa @飞龙 TensorFlow 是一款用于数值计算的强大的...

apachecn_飞龙
04/23
0
0
TensorFlow 基础知识

参考资料: 深度学习笔记目录 向机器智能的TensorFlow实践 TensorFlow机器学习实战指南 Nick的博客 TensorFlow 采用数据流图进行数值计算。节点代表计算图中的数学操作,计算图的边表示多维数...

xinet
2017/11/23
0
0
如何使用 TensorFlow mobile 将 PyTorch 和 Keras 部署到移动设备

雷锋网(公众号:雷锋网)按:本文为雷锋字幕组编译的技术博客,原标题 Deploying PyTorch and Keras Models to Android with TensorFlow Mobile ,作者为 John Olafenwa 。 翻译 | 于志鹏 整理...

雷锋字幕组
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring boot中日期的json格式化

Model 在model层中,类的日期属性上面添加如下注解: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss") 参考 Jackson Date格式化教程...

亚林瓜子
2分钟前
0
0
Eclipse:Failed to load the JNI shared library

1.问题背景: 由于我之前使用jdk1.9学习,当使用Luke的时候发现jdk版本过高,需要向下配置jdk,就向朋友拷了一个安装包。重新配置路径后,便开始报错。 2.问题描述: Failed to load the JNI...

tinder_boy
4分钟前
0
0
少儿学习编程课程是否真的适合七八岁的低龄儿童[图]

少儿学习编程课程是否真的适合七八岁的低龄儿童[图]: 天下熙熙皆为利来,天下攘攘皆为利往。 这几年来,乐高教育机构在国内如同雨后春笋般出现,当然关闭/转手的也很多。从教师角度来看,部...

原创小博客
10分钟前
0
0
ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
18分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
21分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
24分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
24分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
34分钟前
1
0
基于阿里出得ng-Alain搭建后台管理系统

首先跟大家介绍一下ng_Alain(阿里团队出品) ng-alain技术栈基于 Typescript、Angular、g2、@delon 和 ng-zorro-antd,提前了解和学习这些知识会非常有帮助。 ng-alain 脚手架是基于 Angular ...

方宏春
38分钟前
1
0
Spring框架IOC和AOP的实现原理

一、IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转...

HaierBrother
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部