Python tensorflow Optimizer.py";优化器.“为”获取“变量”;文件功能

Python tensorflow Optimizer.py";优化器.“为”获取“变量”;文件功能,python,tensorflow,optimization,Python,Tensorflow,Optimization,我正在尝试在tensorflow中实现一个优化器,并且一直在研究tensorflow旧版本中的优化器代码,希望了解这个函数\u get\u variable\u的作用是什么?它是优化器文件中的第一个函数 任何帮助都将不胜感激 谢谢。我看到这个函数检查两个条件 ResourceVariable和VarHandleOp 根据中的注释,这是一个ResourceVariable 例如,如果在中有多个ResourceVariable赋值 单个session.run调用每个操作都有一个定义良好的值 如果赋值

我正在尝试在tensorflow中实现一个优化器,并且一直在研究tensorflow旧版本中的优化器代码,希望了解这个函数
\u get\u variable\u的作用是什么?它是优化器文件中的第一个函数

任何帮助都将不胜感激


谢谢。

我看到这个函数检查两个条件

ResourceVariable和VarHandleOp

根据中的注释,这是一个ResourceVariable

例如,如果在中有多个ResourceVariable赋值 单个session.run调用每个操作都有一个定义良好的值 如果赋值和读取连接,则使用变量的值 图中的边。考虑下面的示例,其中两个写 可能导致tf.Variable和tf.ResourceVariable行为不同:

VarHandleOp似乎有更深层次的语义

“管理变量放置位置的常用方法是创建一个方法来确定每个Op的放置位置,并在使用
tf.device()调用时使用该方法代替特定的设备名称。”考虑到一个模型在2 GPU上被训练,变量将被放置在CPU上。将有一个用于创建和放置“塔”的循环。“在每个2个GPU上。将创建一个自定义设备放置方法,用于监视Variable、VariableV2和VarHandleOp类型的操作,并指示它们将被放置在CPU上。所有其他操作都将放置在目标GPU上。”

它用示例代码进一步解释了这个场景

  a = tf.Variable(1.0, use_resource=True)
  a.initializer.run()
  assign = a.assign(2.0)
  with tf.control_dependencies([assign]):
    b = a.read_value()
  with tf.control_dependencies([b]):
    other_assign = a.assign(3.0)
  with tf.control_dependencies([other_assign]):
    # Will print 2.0 because the value was read before other_assign ran. If
    # `a` was a tf.Variable instead, 2.0 or 3.0 could be printed.
    tf.Print(b, [b]).eval()