Tensorflow入门

Tensorflow入门

计算模型–计算图
  • 概念

    Tensor 表明了数据结构,flow体现了它的计算模型,直观地表达了张量之间通过计算相互转换的过程。

    每个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。

数据模型–张量
  • 结构

    一个张量中主要保存了三个属性:名字、维度和类型。

    • 名字:张量唯一的标识符,同时给出了这个张量是如何计算出来的。“node:src_output”,node为节点名称, src_output表示来自节点的第几个输出。
    • 维度:描述张量的维度信息。
    • 类型
  • . 使用

    • 对中间结果的引用
    • 用来获得计算结果。张量本省不存储具体的数字,通过session后可以得到具体的数字。
运行模型–会话
  • 会话拥有管理程序运行是的所有资源。

  • 会话的两种模式:

    明确调用会话生成函数和关闭会话函数

    # 创建会话
    sess = tf.Session()
    # 使用会话得到运算的结果
    sess.run(...)
    # 关闭会话
    sess.close()
    

    通过python上下文管理器使用会话

    # 创建会话
    with  tf.Session() as sess:
        sess.run(...)
        ....
    # 不需要调用close关闭会话,上下文退出时会话自动关闭和资源自动释放
    
  • 会话指定后,可以通过tf.Tensor.eval来计算张量的取值。

  • 交互式环境下,使用tf.Interactivesession自动将生成的会话注册为默认会话,获取张量比较方便,省去将产生的会话注册为默认会话的过程。

  • 通过ConfigProto Protocol Buffer配置需要生成的会话

	config = tf.ConfigProto(allow_soft_placement=True, # 增强程序的可移植性
	                        # 日志中记录每个节点被安排在那个设备上方便调试
							log_device_placement=True) 
	sessl = tf.InteractiveSession(config=config)

	sess2 = tf.Session(config=config)
Tensorflow 变量
  • 变量与张量之间的关系

    变量的声明函数tf.Variable是一个运算,这个运算的输出结果就是一个张量,所以变量只是一种特殊的张量。

  • tf.Variable

    tf.global_varibales()拿到当前计算图中所有的变量

    通过trainable区分需要优化的参数和其他参数。

  • 变量在构建后,类型不能再改变

变量管理
  • tf.Variabletf.get_variable的区别

    • tf.get_variable用于创建变量时,它和tf.Variable的功能基本等价。

    • tf.Variabletf.get_variable最大的区别在于指定变量名称的参数。

      对于tf.Variable,变量名称是一个可选参数,通过name="v"的形式给出

      对于tf.get_variable,变量名称是一个必填的参数,函数会根据这个名字去创建或者获取变量。

  • tf.get_variable的使用

    • tf.variable_scope 函数使用参数 reuse=True生成上下文管理器时,这个上下文管理器内所
      有的tf.get_variable 函数会直接获取己经创建的变量。如果变量不存在,tf.get_variable函数将报错;相反,如果tf.variable_scope函数使用参数 reuse=None 或者reuse=False 创建上下文管理器,tf.get_variable操作将创建新的变量。如果同名的变量已经存在,则 函数报错。

    • tf.variable_scopt可以嵌套

      • 通过tf.get_variable_scope获取当前上下文管理器的reuse值。

        with tf.variable_scope ("root"):
            print(tf.get_variable_scope().reuse) 		# 输出为False
            with tf.variable_scope("foo", reuse=True):
                print(tf.get_variable_scope().reuse)	# 输出为True
                with tf.variable scope("bar"): 			# 不指定reuse,
                    print(tf.get_variable_scope().reuse)# 输出为True,当前值会与外
                    									# 面一层保持一致	
            print(tf.get_variable_scope().reuse)		# reuse回到值为False
        
      • 在命名空间内创建的变量名称会带上这个命名空间名作为前缀。

        with tf.variable_scope("foo"):
        	v2 = tf.get_variable("v", [1])
        	print(v2.name)				# 输出foo/v:0
        with tf.variable_scope("foo"):
            with tf.variable_scope("bar"):
            	v3 = tf.get_variable("v", [1])
            	print v3.name			# 输出foo/bar/v:0
        
模型持久化
  • 保存和还原网络模型

    • Tensorflow提供了tf.train.Saver类。
    import tensorflow as tf
    
    vl = tf.Variable(tf.constant(l.0 , shape=[l]), name="vl")
    v2 = tf.Variable(tf.constant(2.0 , shape=[l]), name="v2")
    result = vl + v2
    init_op= tf.global_variables_initializer()
    # 声明 tf.train.Saver 类用于保存模型。
    saver = tf.train.Saver() 
    with tf.Session() as sess :
        sess.run(init_op)
        # 将模型保存到/path/to/model/model.ckpt 文件。
        saver.save(sess,"/path/to/model/model.ckpt")
    
    • 路径下会生成4个文件(0.11版本以后)参考stackoverflow回答

      .cpkt.meta:保存了计算图的结构。

      .cpkt.data:保存每个训练变量的取值。

      .cpkt.index:

      checkpoint:保存了一个目录下所有的模型文件列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值