gpt4 book ai didi

python - TensorFlow 优化器中的 _get_hyper 和 _set_hyper 是什么?

转载 作者:行者123 更新时间:2023-12-04 09:49:01 26 4
gpt4 key购买 nike

我在 __init__ 中看到它,例如Adam优化器:self._set_hyper('beta_1', beta_1)。整个代码中还有_get_hyper_serialize_hyperparameter。我在 Keras 中没有看到这些优化器——它们是可选的吗?在创建自定义优化器时应该或不应该使用它们?

最佳答案

它们支持设置和获取 Python 文字(intstr 等)、callables 和张量。使用是为了方便一致性:通过_set_hyper 设置的任何内容都可以通过_get_hyper 检索,避免重复样板代码。我已经在所有主要的 TF 和 Keras 版本中实现了 Keras AdamW,并将其用作引用。

  • t_cur 是一个tf.Variable。每次我们“设置”它时,我们都必须调用K.set_value;如果我们执行 self.t_cur=5,这将破坏 tf.Variable 并破坏优化器功能。相反,如果我们使用 model.optimizer._set_hyper('t_cur', 5),它会适本地设置它 - 但这需要通过 set_hyper previously 定义它.
  • _get_hyper_set_hyper 都启用程序化属性处理 - 例如,我们可以使用以下列表创建一个 for 循环仅使用 _get_hyper_set_hyper 获取或设置属性名称,否则我们需要编写条件和类型检查代码。此外,_get_hyper(name) 要求之前通过 set_hyper 设置了 name

  • _get_hyper 通过 dtype= 启用类型转换。例如:默认情况下,Adam 中的 beta_1_t 被转换为与 var 相同的数字类型(例如层权重),这是某些操作所必需的。再次方便,因为我们可以手动进行类型转换 (math_ops.cast)。

  • _set_hyper 启用 _serialize_hyperparameter 的使用,它检索可调用对象、张量的 Python 值(intfloat 等) ,或者已经是 Python 的值。名称源于将张量和可调用对象转换为 Pythonics 的需要,例如pickling 或 json-serializing - 但可以用作在图形执行中查看张量值的便利。

  • 最后;通过 _set_hyper 实例化的所有内容都分配给 optimizer._hyper 字典,然后在 _create_hypers 中迭代。循环中的 else 将所有 Python 数值转换为张量 - 所以 _set_hyper 不会创建 int, float 等属性。值得注意的是 aggregation= kwarg,其文档中写道:“指示如何聚合分布式变量”。这部分不仅仅是“为了方便”(要复制大量代码)。

    • _set_hyper 有一个限制:不允许实例化 dtype。如果 dtype 需要 _create_hypers 中的 add_weight 方法,则应直接调用它。

何时使用与不使用:如果属性由优化器通过 TensorFlow 操作使用 - 即如果它需要是 tf.Variable。例如,epsilon 被定期设置,因为它永远不需要作为张量变量。

关于python - TensorFlow 优化器中的 _get_hyper 和 _set_hyper 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62042342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com