TensorFlow-1
Tensorflow 中文官网教程–2.0版本的官方教程
TensorFlow教程:TensorFlow快速入门教程(非常详细)
pytorch Vs tensorflow
Tensorflow来源: 由较低级别的符号计算库(例如: Theano) 和 较高级别的网络规范库(例如:Blocks 和 Lasagne)组合而成。
TensorFlow的劣势: 1.x API混乱冗余;2.x重点关注tf.keras,弃用其他API。但是1.x 和2.x 的兼容性堪忧。
TensorFlow的计算方式: 创建数据流图,将数据放入数据流图中计算。数据流图中的节点表示数学操作(op:operation),连线表示tensor 流动的通道。每个节点获得若干个tensor,执行计算后产生若干个tensor。数据流图在会话(Session)中启动运行。
import tensorflow as tf
1.Graph对象
计算图–可以认为是详细的流程图,其包括每一步的操作[op]和变量名字。
显式构建,graph构造函数无需接受任何参数
g = tf.Graph()
with g.as_default():
#创建一些OP;它们将被添加到Graph的对象g中
a = tf.mul(2,3)
隐式构建,当Tensorflow库被加载时,它会自动的创建一个Graph对象,并将 其作为默认的数据流图。获取默认数据流图具柄:
default_graph = tf.get_default_graph
2.Session对象
session负责分配资源,计算operation, 得出结果。 Session构造函数可接受3个参数。
- target 指定执行引擎,默认值为空字符串。在分布式训练中,用于连接不同的tf.train.server.
- graph 指定将要加载的Graph 对象, 默认值None(使用默认数据流图)。
- config 指定session 对象的配置参数,例如CPU、GPU使用数目、数据流图优化参数、日志选项等。
使用run 来运行相应的计算操作,得到fetches中的张量值。tf.Session.run()函数返回值为fetches指定的执行结果。如果fetches是一个元素就返回一个值;若fetches是一个list,则返回list的值,若fetches是一个字典类型,则返回和fetches同keys的字典。
session.run( fetches, feed_dict=None, options=None, run_metadata=None)
Session的开启涉及具体运算,比较消耗资源。在使用结束后,建议关闭Session。
-> 手动关闭关闭session
a = tf.constant(1, dtype=tf.int8)
b = tf.constant(2, dtype=tf.int8)
res= a + b
sess = tf.Session() # 加载默认数据流图
sess.run(res) # 执行运算
sess.close() # 手动关闭session
->自动关闭session 使用with来限定session 的作用范围
a = tf.constant(1, dtype=tf.int8)
b = tf.constant(2, dtype=tf.int8)
res= a + b
with tf.Session() as sess: # 运算结束后session自动关闭
sess.run(res) # 执行运算
res.eval() # tensor eval() 方法和 sess.run(res)效果一致
3.Variabels变量
Variabels 类型的参数可通过梯度下降更新、训练。必须明确的初始化而且可以通过Saver保存到磁盘上。
定义Variabels 类型的参数: 使用tf.Variable(tensor)封装相应的tensor
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
在graph 中若含有variabels 类型的变量,必须使用在session中显式调用 初始化函数。
-> 全量variable 初始化 tf.global_variables_initializer()
# 含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,
# 在debug时还不是一个tensor,而是一个Variable变量类型
tensor = tf.Variable(tf.random_normal(shape=[10]))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init) # initialization variables
print(sess.run(tensor))
-> 部分variable 初始化 tf.variables_initializer()
var1 = tf.Variable(0,name="initialize_me")
var2 = tf.Variable(1,name="no_initialization")
init = tf.variables_initializer([var1],name="init_var1")
with tf.Session() as sess:
sess.run(init)
4. placeholders与feed_dict
tf.placeholder 创建占位符号,比如模型的输入数据,其只有在训练与预测时才会有值。赋值时,使用feed_dict 进行赋值操作。
import numpy as np
x = tf.placeholder(tf.float32, shape=(10, 10)) # 10行10列
y = tf.matmul(x, x) # 矩阵乘
with tf.Session() as sess:
#print(sess.run(y)) # ERROR: 此处x还没有赋值.
rand_array = np.random.rand(1024, 1024)
print(sess.run(y, feed_dict={x: rand_array})) # Will succeed.
5. tf.train.Saver() 模型参数保存、加载
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
init = tf.initialize_all_variables()
# Add ops to save and restore all the variables.
saver = tf.train.Saver()
# Later, launch the model, initialize the variables, do some work, save the variables to disk.
with tf.Session() as sess:
sess.run(init)
save_path = saver.save(sess, "/tmp/model.ckpt")
print "Model saved in file: ", save_path
模型恢复时,variable 不需要初始化
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
saver = tf.train.Saver()
# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
with tf.Session() as sess:
saver.restore(sess, "/tmp/model.ckpt")
print "Model restored."