• TensorFlow进阶(三)---变量的创建、初始化


    变量的的创建、初始化、保存和加载

    其实变量的作用在语言中相当,都有存储一些临时值的作用或者长久存储。在Tensorflow中当训练模型时,用变量来存储和更新参数。变量包含张量(Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。值可在之后模型训练和分析是被加载。

    Variable类

    tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

    创建一个带值的新变量initial_value

    • initial_value:A Tensor或Python对象可转换为a Tensor.变量的初始值.必须具有指定的形状,除非 validate_shape设置为False.

    • trainable:如果True,默认值也将该变量添加到图形集合GraphKeys.TRAINABLE_VARIABLES,该集合用作Optimizer类要使用的变量的默认列表

    • collections:图表集合键列表,新变量添加到这些集合中.默认为[GraphKeys.VARIABLES]

    • validate_shape:如果False允许使用未知形状的值初始化变量,如果True,默认形状initial_value必须提供.

    • name:变量的可选名称,默认'Variable'并自动获取

    变量的创建

    创建当一个变量时,将你一个张量作为初始值传入构造函数Variable().TensorFlow提供了一系列操作符来初始化张量,值初始的英文常量或是随机值。像任何一样Tensor,创建的变量Variable()可以用作图中其他操作的输入。此外,为Tensor该类重载的所有运算符都被转载到变量中,因此您也可以通过对变量进行算术来将节点添加到图形中。

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

    调用tf.Variable()向图中添加了几个操作:

    • 一个variable op保存变量值。
    • 初始化器op将变量设置为其初始值。这实际上是一个tf.assign操作。
    • 初始值的ops,例如 示例中biases变量的zeros op 也被添加到图中。

    变量的初始化

    • 变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。最常见的初始化模式是使用便利函数 initialize_all_variables()将Op添加到初始化所有变量的图形中。
    init_op = tf.global_variables_initializer()
    
    with tf.Session() as sess:
      sess.run(init_op)
    • 还可以通过运行其初始化函数op来初始化变量,从保存文件还原变量,或者简单地运行assign向变量分配值的Op。实际上,变量初始化器op只是一个assignOp,它将变量的初始值赋给变量本身。assign是一个方法,后面方法的时候会提到
    with tf.Session() as sess:
        sess.run(w.initializer)

    通过另一个变量赋值

    你有时候会需要用另一个变量的初始化值给当前变量初始化,由于tf.global_variables_initializer()初始化所有变量,所以需要注意这个方法的使用。

    就是将已初始化的变量的值赋值给另一个新变量!

    weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
    
    w2 = tf.Variable(weights.initialized_value(), name="w2")
    
    w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")

    所有变量都会自动收集到创建它们的图形中。默认情况下,构造函数将新变量添加到图形集合GraphKeys.GLOBAL_VARIABLES。方便函数 global_variables()返回该集合的内容。

    属性

    name

    返回变量的名字

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

    op

    返回op操作

    weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
    print(weights.op)

    方法

    assign

    为变量分配一个新值。

    x = tf.Variable(5.0,name="x")
    w.assign(w + 1.0)

    eval

    在会话中,计算并返回此变量的值。这不是一个图形构造方法,它不会向图形添加操作。方便打印结果

    v = tf.Variable([1, 2])
    init = tf.global_variables_initializer()
    
    with tf.Session() as sess:
        sess.run(init)
    
        # 指定会话
        print(v.eval(sess))
        # 使用默认会话
        print(v.eval())

    变量的静态形状与动态形状

    TensorFlow中,张量具有静态(推测)形状和动态(真实)形状

    • 静态形状:

    创建一个张量或者由操作推导出一个张量时,初始状态的形状

    • tf.Tensor.get_shape:获取静态形状
    • tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下
    • 动态形状:

    一种描述原始张量在执行过程中的一种形状

    • tf.shape(tf.Tensor):如果在运行的时候想知道None到底是多少,只能通过tf.shape(tensor)[0]这种方式来获得
    • tf.reshape:创建一个具有不同动态形状的新张量

    要点

    1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状

    2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状

    3、tf.reshape()动态创建新张量时,元素个数不能不匹配

    4、运行时候,动态获取张量的形状值,只能通过tf.shape(tensor)[]

    管理图中收集的变量

    tf.global_variables()

    返回图中收集的所有变量

    weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
    
    print(tf.global_variables())
  • 相关阅读:
    Openssl自签发SSL证书
    营业执照信息识别
    kubernetes容器编排YAML详解
    drf的序列化
    K8S存储
    身份证信息识别
    6.Stream
    11.17个提升开发效率的“轮子”
    1.中台
    8.函数式接口
  • 原文地址:https://www.cnblogs.com/fwl8888/p/9792706.html
Copyright © 2020-2023  润新知