Python TensorFlow优化器中的“获取超”和“设置超”是什么?
我在优化器的Python TensorFlow优化器中的“获取超”和“设置超”是什么?,python,tensorflow,keras,tensorflow2.0,tf.keras,Python,Tensorflow,Keras,Tensorflow2.0,Tf.keras,我在优化器的\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。代码中还有\u get\u hyper和\u serialize\u hyperparameter。我在优化器中没有看到这些-它们是可选的吗?在创建自定义优化器时,什么时候应该或不应该使用它们?它们启用设置和获取Python文本(int、str等)、可调用和张量。用法是为了方便和
\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。代码中还有\u get\u hyper
和\u serialize\u hyperparameter
。我在优化器中没有看到这些-它们是可选的吗?在创建自定义优化器时,什么时候应该或不应该使用它们?它们启用设置和获取Python文本(int
、str
等)、可调用和张量。用法是为了方便和一致性:通过\u set\u hyper
设置的任何内容都可以通过\u get\u hyper
检索,避免重复样板代码。我已经在所有主要的TF和Keras版本中实现了它,并将其用作参考
- 是一个
tf.变量
。每次“设置”它时,我们都必须调用K.set_value
;如果我们执行self.t\u cur=5
,这将破坏tf.Variable
,并破坏优化器的功能。相反,如果我们使用model.optimizer.\u set\u hyper('t\u cur',5)
,它会正确地设置它-但这需要通过set\u hyper
定义它
\u get\u hyper
和\u set\u hyper
都支持对属性进行编程处理-例如,我们可以使用属性名称列表创建for循环,以便仅使用\u get\u hyper
和\u set\u hyper
来获取或设置,否则我们需要编写条件和类型检查代码。另外,\u get\u hyper(name)
要求先前通过set\u hyper
设置了name
\u get\u hyper
通过dtype=
启用类型转换。例如:beta\u 1\u t
默认情况下,Adam被转换为与var
相同的数值类型(例如层重),这是某些操作所必需的。这也是一种方便,因为我们可以手动输入(math\u ops.cast
)\u set\u hyper
支持使用,它检索可调用项、张量或已存在的Python值的Python值(int
、float
等)。该名称源于需要将张量和可调用项转换为Pythonics,例如pickle或json序列化,但可以方便地在图形执行中查看张量值\u set\u hyper
实例化的所有内容都将分配给优化器。\u hyper
字典,然后在中进行迭代。循环中的else
将所有Python数值转换为张量-因此\u set\u hyper
不会创建int
、float
等属性。值得注意的是kwarg,其文档内容为:“指示如何聚合分布式变量”。这一部分比“为了方便”(大量代码需要复制)稍微多一些
有一个限制:不允许实例化\u set\u hyper
。如果需要使用dtype使用dtype
中的方法,则应直接调用它\u create\u hypers
tf.变量
。例如,它是定期设置的,因为它永远不需要作为张量变量