- TensorFlow 中文主页: https://tensorflow.google.cn/
下面主要介绍 Low Level APIs:
TensorFlow Core Walkthrough
一般地,TensorFlow 编程由以下两个独立的部分组成:
- 通过
tf.Graph
建立计算图 (Building the computational graph (atf.Graph
).) - 使用
tf.Session
运行计算图(Running the computational graph (using atf.Session
).)
import numpy as np
import tensorflow as tf
Graph 与 Session
A computational graph is a series of TensorFlow operations arranged into a graph. The graph is composed of two types of objects.
tf.Operation
(or “ops”): The nodes of the graph. Operations describe calculations that consume and produce tensors.tf.Tensor
: The edges in the graph. These represent the values that will flow through the graph. Most TensorFlow functions return tf.Tensors.
计算图是由一系列 TensorFlow 的运算 (ops) 按照一定的顺序排列构成的。在一个 tf.Graph
中包含两种类型的对象:
tf.Operation
(or “ops”): 图的节点(nodes). 节点描述了如何 对 Tensor 的输入和输出进行计算;tf.Tensor
: 图的边(edges). 边代表了流经计算图的值。
大多数 TensorFlow 函数均返回 tf.Tensors
.
重要: tf.Tensors
并不存储 values, 而它仅仅是处理计算图中元素的一个 handle.
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0) # also tf.float32 implicitly
total = a + b
print(a)
print(b)
print(total)
Tensor("Const:0", shape=(), dtype=float32)
Tensor("Const_1:0", shape=(), dtype=float32)
Tensor("add:0", shape=(), dtype=float32)
上面说的不是很好理解,我说下自己的理解:
tf.Tensor
可以理解为一个符号,比如数学中的未知元 (仅仅是一个代表, 它可以是数组,字符串等)tf.Operation
可以理解为 的方程,比如 (只要你可以定义一个合理的运算规则, 若 是字符串,该方程也可能成立)
比如,当你传入 ,则会输出运算的结果 ;当没有值传递给 时,它们仅仅是一串符号而已。
换句话说,tf.Graph
是一个定义了各种 tf.Tensor
的依赖关系 (tf.Operation
) 抽象计算图,而 tf.Session
可以看作是 tf.Graph
的一个实例(具象化)。
Datasets
对于一些简单的实验,使用 tf.placeholder
即可 feed 数据。但是,对于数据量比较大或者实验比较复杂,则使用迭代器是一个很好的选择:
-
To get a runnable
tf.Tensor
from a Dataset you must first convert it to atf.data.Iterator
, and then call the Iterator’stf.data.Iterator.get_next
method. -
The simplest way to create an Iterator is with the
tf.data.Dataset.make_one_shot_iterator
method. For example, in the following code the next_item tensor will return a row from the my_data array on each run call:
my_data = [
[0, 1, ],
[2, 3, ],
[4, 5, ],
[6, 7, ],
]
slices = tf.data.Dataset.from_tensor_slices(my_data)
next_item = slices.make_one_shot_iterator().get_next()
next_item
<tf.Tensor 'IteratorGetNext:0' shape=(2,) dtype=int32>
注意,当此迭代器 Costume 尽所有数据时,你再运行 .get_next()
会报错,为此,TensorFlow 提供了一个异常处理机制:tf.errors.OutOfRangeError
, 下面是一个使用的例子:
while True:
try:
print(sess.run(next_item))
except tf.errors.OutOfRangeError:
break
如果 Dataset 依赖于节点的状态,那么你需要在使用迭代器之前对其进行初始化:
r = tf.random_normal([10, 3])
dataset = tf.data.Dataset.from_tensor_slices(r)
iterator = dataset.make_initializable_iterator()
next_row = iterator.get_next()
sess.run(iterator.initializer)
while True:
try:
print(sess.run(next_row))
except tf.errors.OutOfRangeError:
break
详细见datasets
Layers
使用 tf.layers
将需要训练的参数投入到计算图中是一个很好的选择。
下面我们使用 tf.layers
创建一个线性模型:
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(100):
_, loss_value = sess.run((train, loss))
print(loss_value)
print(sess.run(y_pred))
共同学习,写下你的评论
评论加载中...
作者其他优质文章