TensorFlow入门教程

 
  

一、Tensors

TensorFlow所有的数据都称之为Tensor,即TensorFlow图计算过程中,节点之间是数据流转都是采用Tensor的形式进行,而且也只能采用Tensor形式进行。

Tensor可以是一个变量,可以是一个数组,也可以是多维数组等。

一般的,Tensor可以抽象为n-dimensional array or list。

Tensor有几个重要的属性:

Data types,标志该Tensor存储的数据类型,如tf.float32,tf.String等;

Rank,即tensor是几维的数组,scalar rank为0,vector rank为1,matrix rank为3,N-demensional tensor rank为N;

Shape,tensor的形状,scalar shape为[],vector shape为 [D0],matrix shape为 [D0,D1];

import tensorflow as tf

a = tf.zeros((2, 2))

print(a)

输出

Tensor("zeros:0", shape=(2, 2), dtype=float32)

二、Session

Session,会话是TensorFlow的运行上下文环境,TensorFlow的Operations和Compution Graph都必须运行在TensorFlow的Session中。

import tensorflow as tf

# Build a graph

a = tf.constant(5.0)

b = tf.constant(6.0)

c = a * b

# Launch a graph in a sesion

sess = tf.Session()

# Evaluate a tensor c

print(sess.run(c))

输出30.0

从上面可以看出,Session提供了run方法来执行tensor的计算,run方法有四个参数,如下

fetches 必选

feed_dict 可选

options 可选

run_metadata 可选

另外,由于Session提供的是运行环境,所以,是TensorFlow系统宝贵的资源,用完我们要及时释放,释放方式有如下两种:

第一种方式是,直接调用Session.close()方式显示关闭Session;

第二种方式是,采用代码块,当当前代码块执行完毕后,Session会自动被析构释放掉,如下:

with tf.Session() as sess:

result = sess.run(c)

print(result)

InteractiveSession

有一类session是交互式session,这类session能在运行过程中接收外部的输入。交互式的Session能更好的适用于这类场景。

结合Tensor.eval()和Operation.run()来取代Session.run()。这样的好处是避免在一个session中长时间使用一个变量,见下例所示:

# Enter an interactive TensorFlow Session.

import tensorflow as tf

sess = tf.InteractiveSession()

x = tf.Variable([1.0, 2.0])

a = tf.constant([3.0, 3.0])

# Initialize 'x' using the run() method of its initializer op.

x.initializer.run()

# Add an op to subtract 'a' from 'x'.  Run it and print the result

sub = tf.sub(x, a)

print(sub.eval())

[-2. -1.]

# Close the sesion when we are done

sess.close()

三、Variables

变量是TensorFlow重要的概念,前面我们的实例更多的是使用tensorflow constant常量。Variables在使用前必须先初始化好。

tensorflow variables提供了tf.initialize_all_variables()快速初始化所有变量。

import tensorflow as tf

W = tf.Variable(tf.zeros((2, 2)), name="weights")

R = tf.Variable(tf.random_normal((2, 2)), name="random_weights")

with tf.Session() as sess:

sess.run(tf.initialize_all_variables())

print(sess.run(W))

print(sess.run(R))

输出

[[ 0.  0.]

[ 0.  0.]]

[[ 1.09000123  0.34866104]

[ 1.02729785  0.71264291]]

用一个变量赋值给另一个变量,如下:

import tensorflow as tf

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights")

w2 = tf.Variable(weights.initialized_value(), name="w2")

with tf.Session() as sess:

sess.run(tf.initialize_all_variables())

print(sess.run(weights))

print(sess.run(w2))

Saving and Restoring Variables

tf.train.Saver提供了Variable checkpoint转储功能和恢复功能,你可以将变量某一时刻的值持久化到磁盘,当需要用时再从磁盘恢复出来,如下:

import tensorflow as tf

v1 = tf.Variable(tf.zeros((2, 2)), name="weights")

v2 = tf.Variable(tf.random_normal((2, 2)), name="random_weights")

init_op = tf.initialize_all_variables()

saver = tf.train.Saver()

with tf.Session() as sess:

sess.run(init_op)

save_path = saver.save(sess, "/tmp/model.ckpt")

print("Model saved in file: %s" % save_path)

输出

Model saved in file: /tmp/model.ckpt

with tf.Session() as sess:

saver.restore(sess, "/tmp/model.ckpt")

更新变量的值

import tensorflow as tf

# state = 0

state = tf.Variable(0, name="counter")

# new_value = state + 1

new_value = tf.add(state, tf.constant(1))

# state = state + 1

update = tf.assign(state, new_value)

with tf.Session() as sess:

sess.run(tf.initialize_all_variables())

print(sess.run(state))

for _ in range(3):

sess.run(update)

print(sess.run(state))

输出

0

1

2

3

获取变量

import tensorflow as tf

in1 = tf.constant(3.0)

in2 = tf.constant(2.0)

in3 = tf.constant(5.0)

temp = tf.add(in2, in3)

mul = tf.mul(in1, temp)

with tf.Session() as sess:

result = sess.run([mul, temp])

print(result)

输出

[21.0, 7.0]

Variable Scope

变量Scope,类似变量的名字空间。variable_scope设置命名空间,get_variable获取命名空间,如下:

import tensorflow as tf

with tf.variable_scope("foo"):

with tf.variable_scope("bar"):

v = tf.get_variable("v", [1])

assert v.name == "foo/bar/v:0"

Reuse variable scope

重用变量命名空间,在RNN场景中会用到该功能,如下

import tensorflow as tf

with tf.variable_scope("foo"):

v = tf.get_variable("v", [1])

tf.get_variable_scope().reuse_variables()

v1 = tf.get_variable("v", [1])

assert v == v1

Placeholders and Feed Dictionaries

tensorflow的占位符,在程序运行过程中进行参数的赋值,非常使用,用于接受程序外部传入的值,如下:

import tensorflow as tf

in1 = tf.placeholder(tf.float32)

in2 = tf.placeholder(tf.float32)

out = tf.mul(in1, in2)

with tf.Session() as sess:

print(sess.run([out], feed_dict={in1:[7.], in2:[2.]}))

输出

[array([ 14.], dtype=float32)]

最后再提下,tensorflow提供了一个转换为tensor的方法,convert_to_tensor(),如下:

import numpy as np

import tensorflow as tf

a = np.zeros((3, 3))

ta = tf.convert_to_tensor(a)

with tf.Session as sess:

print(sess.run(ta))

参考资料

https://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf

https://www.tensorflow.org/versions/r0.10/get_started/basic_usage.html#basic-usage

你可能感兴趣的:(tensorflow)