我熟悉 Tensorflow Optimizer API 并通过 _create_slots()
使用过槽变量。 optimizer.Optimizer
中的方法,虽然我不是专家,但我已经深入了解了这个 API。
在 1.6RC1 发行说明 ( https://github.com/tensorflow/tensorflow/releases ) 中,关于插槽变量有以下几点我不完全理解:
New Optimizer internal API for non-slot variables. Descendants of AdamOptimizer that access _beta[12]_power will need to be updated.
这里引用的非插槽变量是什么?
API 中的槽变量和非槽变量有什么区别?
最佳答案
TensorFlow 优化器中的槽变量是与每个可训练变量相关联的子变量。例如,如果您有一个变量 Variable1
,您可以添加一个名为 MovingAverage
的插槽,其名称为 Variable1/MovingAverage
.
非时隙变量是属于优化器的一部分并且与任何可训练变量无关的变量,例如 David Parks 链接的问题中 LucasB 的回答中 Adam 中的计数器。
见 tf.keras.optimizers.Optimizer
有关文档中插槽的解释。另请注意,afaik Keras (TF2) 优化器并未明确支持非时隙变量 - 看起来像 optimizer._set_hyper()
是在 TF2 中做到这一点的方法。
另外 - systech 的评论不正确 - 插槽和非插槽变量与 Python 的 __slots__
无关功能。
关于python - Tensorflow 内部优化器 API 中的 `slot variable` 和 `non-slot variable` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48918896/