• 2.5 tensorflow2.3--变量Variable声明和初始化


    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

    https://www.cnblogs.com/bclshuai/p/11380657.html

    1.1  变量Variable

    1.1.1         变量的声明和使用

    变量,它和占位符的不同是它在定义时需要赋值,而且它的数值是可以在图的计算过程中随时改变的。因此,占位符通常用作图的输入(即训练数据),而变量用作图中可以被“训练”或“学习”的那些tensor,例如y=ax+b中的a和b。

    通过变量类Variable来定义,使用之前需要初始化。想要将所有图变量进行集体初始化时应该使用tf.global_variables_initializer,或者单个初始化。

    _init_(self,
                 initial_value=None,#初始值,张量或者能转化为张量的python对象
                 trainable=None,#True时,GradientTape梯度带自动观察这个变量的使用
                 validate_shape=True,是否验证初始值的shape,True验证,False不验证
                 caching_device=None,可选填的设备字符串描述符,需要缓存读时设置,默认为变量设备
                 name=None,
                 variable_def=None,
                 dtype=None,
                 import_scope=None,
                 constraint=None,
                 synchronization=VariableSynchronization.AUTO,
                 aggregation=VariableAggregation.NONE,
                 shape=None):

    rand_t=tf.random.uniform([50,50],0,10,seed=0)#创建随机常量数组50行50列,最大值为10,最小值为0,随机种子是0。以这个矩阵数组作为变量的初始值。

    t_a=tf.Variable(rand_t)

    t_b= tf.Variable(rand_t)       

    r = tf.Variable(tf.random_normal([20, 10], stddev=0.35))     #以标准差0.35的正太分布初始化一个形状为[20,10]的张量

    z = tf.Variable(tf.zeros([20]))  #定义变量,一个形状为[20]的张量, 里面的元素值全部为0.

    #sess.run(tf.global_variables_initializer())  #所有变量初始化

    sess.run(x.initializer) #单个变量初始化

    1.1.2         变量的初始化

    (1)常量声明变量并初始化

    tensorflow所有的变量在使用前都需要初始化。

    下面这条语句用常量1赋值声明了变量,但是没有初始化。

    import tensorflow as tf
    ss = tf.compat.v1.Session()
    d60 = tf.Variable(1, dtype=tf.float32, name='number1')

    如果调用下面的语句,则会报错,因为变量d60没有初始化

    d61 = tf.tan(d60)
    print(ss.run(d61))

    所以我们需要显示初始化变量d60,才能输出正确的数据。

    ss.run(d60.initializer)
    d61 = tf.tan(d60)
    print(ss.run(d61))#输出1.557

    d60是定义的变量,而initializer是变量的初始化操作通过tensorflow的Session来执行这个操作,我们可以print(d60.initializer)来查看这个操作是什么?操作中包含了变量的d60的名称,作为输入,还有d60的类型。ss.run(d60.initializer)的作用就是执行变量d60的初始化操作,来初始化变量d60。感觉这个有点麻烦。

    name: "number1/Assign"

    op: "AssignVariableOp"

    input: "number1"

    input: "number1/Initializer/initial_value"

    attr {

      key: "dtype"

      value {

        type: DT_FLOAT

      }

    }

    (2)变量声明变量并初始化

    声明一个变量d62,以变量d60赋值。

    d60 = tf.Variable(1, dtype=tf.float32, name='number1')
    ss.run(d60.initializer)
    d62 = tf.Variable(d60, dtype=tf.float32)# 
    d63=tf.tan(d62)

    同样我们还要执行变量d62的初始化操作来初始化变量d62,否则执行d63还是会报错。同样d60的初始化操作ss.run(d60.initializer)仍然不能省略,否则会报错。

    print(ss.run(d62.initializer))
    print(ss.run(d63)) 上面d60初始化要加,否则会报错。

    补充信息:

    如果要省略ss.run(d60.initializer)这一句,声明变量d62时,可以采用下面的声明方式

    d62 = tf.Variable(d60.initialized_value(), dtype=tf.float32)

    我们看看initialized_value函数的说明,意思就是返回初始化后的变量值。初始化另外一个变量时,使用这个来代替变量本身。

    def initialized_value(self):
      """Returns the value of the initialized variable.

      You should use this instead of the variable itself to initialize another
      variable with a value that depends on the value of this variable.

    但是使用这个函数,会有下面的警告。意思就是这个函数是tensorflow1.0的,后续可能会被废弃。建议使用tensorflow2.0的函数read_value.

    WARNING:tensorflow:From D:/Project/python/tensorflow/venv/src/caculate.py:72: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.

    Instructions for updating:

    Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

    用tensorflow2.0的函数read_value来初始化另外一个变量。2.X中得到变量都是自动初始化。改成read_value()

    d62 = tf.Variable(d60.read_value(), dtype=tf.float32)
    d63=tf.tan(d62.read_value())
    print(d63)

    报如下错误,本地的容器不存在或者变量未初始化,所以导致了失败。

    Error while reading resource variable number1 from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist.

    需要加上初始化语句才行

    init_op = tf.compat.v1.global_variables_initializer()
    print(ss.run(init_op))

  • 相关阅读:
    构建Web API服务
    AutoMapper(七)
    AutoMapper(六)
    AutoMapper(五)
    AutoMapper(四)
    AutoMapper(三)
    递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据
    递归程序练习:输出十进制数的二进制表示
    递归函数练习——累乘
    递归练习——累加和
  • 原文地址:https://www.cnblogs.com/bclshuai/p/13978923.html
Copyright © 2020-2023  润新知