我正在尝试在tensorflow中实现优化器,并且一直在从旧版本的tensorflow查看优化器代码,并想了解此功能_get_variable_for
的作用是什么?这是优化程序文件中的第一个函数。
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:-1)
我看到此函数检查两个条件。
ResourceVariable 和 VarHandleOp
根据code
中的注释,这是 ResourceVariable”例如,如果对一个ResourceVariable分配了多个 一个session.run调用,每个操作都有一个定义明确的值 如果分配和读取已连接,则使用变量的值 在图中的边缘。考虑下面的示例,其中两次写 会导致tf.Variable和tf.ResourceVariable行为不同:“
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()
根据{{3}} ,VarHandleOp 似乎具有更深的语义
“管理变量放置位置的一种常见方法是创建一种方法来确定每个Op的放置位置,并在用tf.device():
调用时使用该方法代替特定的设备名称。其中要在2个GPU上训练模型并将变量放置在CPU上,将存在一个循环,用于在2个GPU的每个GPU上创建和放置“塔”。表示类型为Variable,VariableV2和VarHandleOp的Ops,并指示它们将放置在CPU上。所有其他Ops将放置在目标GPU上。“
它通过示例代码进一步说明了这种情况。