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
      中的方法,则应直接调用它
  • 何时使用与不使用:如果优化器通过TensorFlow ops使用属性,则使用-即,如果它需要是
    tf.变量
    。例如,它是定期设置的,因为它永远不需要作为张量变量