美文网首页
2020-05-13 关于tf中input_feed = {mo

2020-05-13 关于tf中input_feed = {mo

作者: 掉了西红柿皮_Kee | 来源:发表于2020-05-13 10:43 被阅读0次

    记录自己的菜。


    tensorflow提供了通过变量名称来创建或者获取一个变量的机制。通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量。
    因此在传值的时候只需要在命名空间中对响应的name赋值就好,例如:

    input_feed = {model.x.name: x}
    

    上面的用于传值的代码是key-valuedict(),其中keymodel中成员变量x所对应的name

    • tf中变量的创建
      以下两个定义是等价的
      fir:
      v = tf.get_variable('v', shape=[1], \ initializer=tf.constant_initializer(1.0))
      sec:
      v = tf.Variable(tf.constant(1.0, shape=[1], name='v')
      二者的最大区别在于:tf.Variable的变量名是一个可选项,通过name='v'的形式给出。但是tf.get_variable必须指定变量名。
    • tf命名空间管理
      命名空间管理的功能涉及到tf.variable_scopetf.name_scope两个函数,大部分情况下二者是等价的,唯一的区别是在使用tf.get_variable函数时。
      with tf.variable_scope('foo'):
          a = tf.get_variable('bar',shape =[1])
          print(a.name) # foo/bar:0
      
      with tf.name_scope('aoo'):
          a=tf.Variable([1])
          print(a.name) # aoo/Variable:0
          b=tf.get_variable('b',[1])
          print(b.name) # b:0
      
      由上面的 print()结果可以看出tf.get_variable创建的变量并不是aoo/b:0,而是b:0。这就表示了在tf.name_scope函数下,tf.get_variable不受其约束。
    • 命名空间的作用
      同一个空间下,变量名不能相同。就好像在同一个家庭中,两个家庭成员一般不会取同样的名字,不然在叫人(调用)的时候会产生混淆。因此在同一个在命名空间中创建相同的变量或报错。如:
      with tf.variable_scope('foo'):
          v = tf.get_variable('v',  \
      [1],initializer=tf.constant_initializer(1.0))
      
      with tf.variable_scope('foo'):
          v1 = tf.get_variable('v',[1])
      
      错误信息:Variable foo/v already exists, disallowed.Did you mean to set reuse=True in Varscope?
      其原因就是在命名空间foo中创建了相同的变量。如果要在foo下创建变量v1,其name='v',只需要将reuse设置为Ture
      with tf.variable_scope('foo', reuse=True):
          v1 = tf.get_variable('v',[1])
          print(v1.name) # foo/v
      
      结论:参数reuse=Falsetf.variable_scope创建变量;reuse=Truetf.variable_scope获取变量。

    Done

    相关文章

      网友评论

          本文标题:2020-05-13 关于tf中input_feed = {mo

          本文链接:https://www.haomeiwen.com/subject/ugbgnhtx.html