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个参数。

  1. target 指定执行引擎,默认值为空字符串。在分布式训练中,用于连接不同的tf.train.server.
  2. graph 指定将要加载的Graph 对象, 默认值None(使用默认数据流图)。
  3. 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)效果一致

参考文档:TensorFlow中Session的使用

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."
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值