tensorflow编程: Building Graphs

Core graph data structures

tf.Graph

每次都必须要指定一个graph作为as_default,并只能在该graph中进行一切操作。

import tensorflow as tf

# 程序从一开始就默认有一个 graph 。任何的 tf.Graph() 操作 都是在新建 graph,但都只能在新建的那个 上下文管理器 内发挥作用
a = tf.get_default_graph()

# 该graph 继承 a.graph,则 该graph 内 default_graph 就为 a.graph
with a.as_default():
    b = tf.get_default_graph()
    assert b is a

# 通过 tf.Graph() 新建了一个 graph,则 该graph 内 default_graph 就为 新graph,且仅仅作用于该 上下文管理器内部
with tf.Graph().as_default():
    c = tf.get_default_graph()
    assert c is not a

assert tf.get_default_graph() is a
Process finished with exit code 0

每个环境下 存在只能存在 一个 graph 。非初始默认的 graph 通过 tf.Graph() 新建,但必须通过 as_default 才能启用形成一个 context manager 小环境来供使用。tf.Graph().as_default() 的作用 就是 新建——启用 二合一,一步到位执行。

import tensorflow as tf

a = tf.get_default_graph()
b = tf.Graph()
with b.as_default():
    c = tf.get_default_graph()
assert a is not b
assert b is c
Process finished with exit code 0

tf.Operation

tf.Tensor

Tensor types

tf.DType

表示Tensor中元素的类型。(这个api的作用暂时不是很懂,以后再回过头来看。)

import tensorflow as tf

foo = 1
print tf.DType(foo).is_floating
print tf.DType(foo)
print tf.as_dtype(foo)
print type(foo)
True
<dtype: 'float32'>
<dtype: 'float32'>
<type 'int'>

tf.as_dtype

Utility functions

tf.device

指定使用哪块处理器

tf.container

tf.name_scope

tf.name_scope (name, default_name=None, values=None)

tf.name_scope 只能对 tf.Variable() 加前缀,对 tf.get_variable() 无效。

import tensorflow as tf

with tf.name_scope("my"):
    initializer = tf.constant_initializer(value=10)
    var1 = tf.get_variable(name='var1', shape=[1], dtype=tf.float32, initializer=initializer)
    var2 = tf.Variable(name='var2', initial_value=20, dtype=tf.float32)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print var1.name, sess.run(var1)
    print var2.name, sess.run(var2)
var1:0 [ 10.]

# 只有 tf.Variable() 被加了前缀。
my/var2:0 20.0

tf.control_dependencies

tf.convert_to_tensor

tf.convert_to_tensor (value, dtype=None, name=None, preferred_dtype=None)

将变量类型转换为 tensor型

import tensorflow as tf

a = 1
b = tf.convert_to_tensor(a)
print type(a), type(b)
<type 'int'> <class 'tensorflow.python.framework.ops.Tensor'>

Process finished with exit code 0

tf.get_default_graph

返回 当前所在的graph

# 见 tf.Graph

tf.reset_default_graph

重设 当前所在的graph

import tensorflow as tf

a = tf.get_default_graph()
tf.reset_default_graph()
assert tf.get_default_graph() is not a
Process finished with exit code 0

Graph collections

tf.add_to_collection

收集并归类存放 键值对

tf.add_to_collection (name, value)

import tensorflow as tf

var1 = 10
var2 = 20
tf.add_to_collection('var_1', value=var1)
print tf.get_collection(key='var_1'), type(tf.get_collection(key='var_1'))
print tf.get_collection(key='var_2'), type(tf.get_collection(key='var_2'))
assert list([var1]) == tf.get_collection(key='var_1')
[10] <type 'list'>
[] <type 'list'>

Process finished with exit code 0

tf.get_collection

按名索取 tf.add_to_collection() 收集到的 键值对 ,以 list 形式返回;如不存在着返回 空list

tf.get_collection (key, scope=None)

# 同 tf.add_to_collection

tf.get_collection_ref

感觉和 tf.get_collection 的不同就在于 没有 scope 参数,所以就没有了指定 scope 的功能。

tf.get_collection_ref (key)

import tensorflow as tf

var1 = 10
tf.add_to_collection('var_1', value=var1)
print tf.get_collection_ref(key='var_1'), type(tf.get_collection_ref(key='var_1'))
[10] <type 'list'>

tf.GraphKeys

略。

Defining new operations

tf.TensorShape

略。

tf.Dimension

略。

tf.op_scope

略。

For libraries building on TensorFlow

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记45 | 代码性能优化建议[转]

14260
来自专栏二进制文集

Java编程思想 ——对象导论

所有编程语言都是抽象机制。人们所能够解决的问题的复杂性,直接取决于抽象的类型和数量。汇编语言是对底层机器的轻微抽象;“命令式语言”(BASIC、C)是对汇编语言...

17430
来自专栏逆向技术

win32编程简介

  我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编写程序的基础.

30330
来自专栏java一日一条

在Java中如何避免“!=null”式的判空语句?

我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPoint...

10710
来自专栏锦小年的博客

python学习笔记7.4-内建模块base64

有时候,我们用noepad++或者记事本打开图片或者程序等文件的时候会显示大量的乱码,主要原因是这些文件编码的时候并不是字符串编码的。如果我们想把这些文件正常显...

23190
来自专栏日常分享

JSON 数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的...

67620
来自专栏达摩兵的技术空间

js代码优化日常001

本文开始针对项目中总结出来的关于js基础知识的代码优化技巧进行每个细节点的分析,后续还会针对某个专题的分析。

20330
来自专栏Java后端技术栈

关于Java代码优化的N条建议!

本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,作者的说法是这样的:

13620
来自专栏软件开发 -- 分享 互助 成长

原型模式C++类的复制构造函数和赋值运算符

一、简介 1、原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 2、为什么会用到原型模式? (1)既然可以直接new,为什么会用到原型...

25950
来自专栏做全栈攻城狮

程序员带你十天快速入门Python,玩转电脑软件开发(四)

本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结。本篇文章主要是基于上一篇的程序员带你十天快速入门Pyth...

9520

扫码关注云+社区

领取腾讯云代金券