文档章节

小白学Tensorflow之可视化与图

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:27
字数 1200
阅读 10
收藏 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灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
斯坦福tensorflow教程(二) tensorflow相关运算

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

致Great
05/09
0
0
Tensorflow 介绍和安装

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 作者:AI小昕 本系列教程将手把手带您从零开始学习Tensorflow,并最终通过Tenso...

磐石001
04/02
0
0
英语不行?你可以试试TensorFlow官方中文版教程

机器之心编辑,参与:思源。 现在 TensorFlow 有官方中文版教程啦,以前的英文版 Tutorials 有了对应的中文翻译。各位还在 TensorFlow 门前徘徊的开发者们,现在可以对着中文教程学习各种流行...

机器之心
11/19
0
0
深度学习框架大战正在进行,谁将夺取“深度学习工业标准”的荣耀?

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

algorithmdog
2016/03/06
0
0
TensorFlow——可视化工具TensorBoard的使用

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

飞天小橘子
05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day179-2018-12-16-英语流利阅读-待学习

《海王》:上映 7 天,票房突破 9 亿,DC 要翻身? Daniel 2018-12-16 1.今日导读 这部电影堪称“有《阿凡达》般的视觉奇观,《指环王》般的史诗质感,《夺宝奇兵》般的寻宝历险,《狮子王》...

飞鱼说编程
15分钟前
5
0
window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
29分钟前
5
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
52分钟前
3
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
21
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部