给定一个任意函数,将其包装,以便进行变量共享。
用法
tf.compat.v1.make_template(
name_, func_, create_scope_now_=False, unique_name_=None, custom_getter_=None,
**kwargs
)
参数
-
name_
此模板创建的范围的名称。如有必要,将通过将_N
附加到名称来使名称唯一。 -
func_
要包装的函数。 -
create_scope_now_
控制在构造模板时或调用模板时是否应创建范围的布尔值。默认为 False,这意味着在调用模板时创建范围。 -
unique_name_
使用时,它会覆盖 name_ 并且不是唯一的。如果相同范围/unique_name 的模板已经存在并且重用为 false,则会引发错误。默认为无。 -
custom_getter_
func_
中使用的变量的可选自定义 getter。有关详细信息,请参阅tf.compat.v1.get_variable
custom_getter
文档。 -
**kwargs
应用于func_
的关键字参数。
返回
-
封装一组变量的函数,这些变量应该创建一次并重用。在调用
make_template
或调用结果时将创建封闭范围,具体取决于create_scope_now_
的值。不管取值如何,第一次调用模板都会进入作用域,不重用,调用func_
创建变量,保证唯一。所有后续调用都将重新进入范围并重用这些变量。
抛出
-
ValueError
如果name_
为无。
迁移到 TF2
警告:这个 API 是为 TensorFlow v1 设计的。继续阅读有关如何从该 API 迁移到本机 TensorFlow v2 等效项的详细信息。见TensorFlow v1 到 TensorFlow v2 迁移指南有关如何迁移其余代码的说明。
tf.compat.v1.make_template
是一个遗留 API,仅与启用的渴望执行和 tf.function
兼容,如果你将它与 tf.compat.v1.keras.utils.track_tf1_style_variables
结合使用。有关更多信息,请参阅 make_template
上的模型映射迁移指南部分:
即使您将旧版 API 用于基于 variable_scope
的变量重用,我们建议直接使用 tf.compat.v1.keras.utils.track_tf1_style_variables
而不是使用 tf.compat.v1.make_template
,因为它以比 make_template
更简单和更可预测的方式与即刻执行互操作。
TF2 API 方法将使用 tf.Module
或 Keras 层和模型来跟踪您的变量,而不是依赖 make_template
。
这将 func_
包装在模板中并对其进行部分评估。模板是在第一次调用它们时创建变量并在之后重用它们的函数。为了使 func_
与 Template
兼容,它必须具有以下属性:
- 该函数应创建所有可训练变量和应通过调用
tf.compat.v1.get_variable
重用的任何变量。如果使用tf.Variable
创建可训练变量,则会抛出 ValueError。可以通过指定tf.Variable(..., trainable=false)
来创建旨在成为局部变量的变量。 - 该函数可以在内部使用变量范围和其他模板来创建和重用变量,但不应使用
tf.compat.v1.global_variables
来捕获在函数范围之外定义的变量。 - 内部范围和变量名不应依赖于未提供给
make_template
的任何参数。一般来说,你会得到一个 ValueError ,告诉你如果你犯了错误,你正在尝试重用一个不存在的变量。
在以下示例中,z
和 w
都将按相同的 y
进行缩放。重要的是要注意,如果我们没有分配 scalar_name
并为 z 和 w 使用不同的名称,则会抛出 ValueError
,因为它无法重用变量。
def my_op(x, scalar_name):
var1 = tf.compat.v1.get_variable(scalar_name,
shape=[],
initializer=tf.compat.v1.constant_initializer(1))
return x * var1
scale_by_y = tf.compat.v1.make_template('scale_by_y', my_op, scalar_name='y')
z = scale_by_y(input1)
w = scale_by_y(input2)
作为 safe-guard,如果通过调用 tf.Variable
创建可训练变量,则返回的函数将在第一次调用后引发 ValueError
。
如果所有这些都是真的,那么模板会强制执行 2 个属性:
- 多次调用同一个模板将共享所有非局部变量。
- 两个不同的模板保证是唯一的,除非您重新输入与模板的初始定义相同的变量范围并重新定义它。此异常的示例:
def my_op(x, scalar_name):
var1 = tf.compat.v1.get_variable(scalar_name,
shape=[],
initializer=tf.compat.v1.constant_initializer(1))
return x * var1
with tf.compat.v1.variable_scope('scope') as vs:
scale_by_y = tf.compat.v1.make_template('scale_by_y', my_op,
scalar_name='y')
z = scale_by_y(input1)
w = scale_by_y(input2)
# Creates a template that reuses the variables above.
with tf.compat.v1.variable_scope(vs, reuse=True):
scale_by_y2 = tf.compat.v1.make_template('scale_by_y', my_op,
scalar_name='y')
z2 = scale_by_y2(input1)
w2 = scale_by_y2(input2)
根据 create_scope_now_
的值,可以在第一次调用或构造时捕获完整的变量范围。如果此选项设置为 True,则通过重复调用模板创建的所有张量将在其名称后附加一个 _N+1,因为第一次在模板构造函数中输入范围时,不会创建张量。
注意:name_
, func_
和 create_scope_now_
有一个尾随下划线,以减少与 kwargs 冲突的可能性。
相关用法
- Python tf.compat.v1.map_fn用法及代码示例
- Python tf.compat.v1.math.log_softmax用法及代码示例
- Python tf.compat.v1.math.softmax用法及代码示例
- Python tf.compat.v1.mixed_precision.enable_mixed_precision_graph_rewrite用法及代码示例
- Python tf.compat.v1.metrics.mean用法及代码示例
- Python tf.compat.v1.multinomial用法及代码示例
- Python tf.compat.v1.mixed_precision.MixedPrecisionLossScaleOptimizer用法及代码示例
- Python tf.compat.v1.metrics.accuracy用法及代码示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代码示例
- Python tf.compat.v1.distribute.MirroredStrategy.experimental_distribute_dataset用法及代码示例
- Python tf.compat.v1.data.TFRecordDataset.interleave用法及代码示例
- Python tf.compat.v1.distributions.Bernoulli.cross_entropy用法及代码示例
- Python tf.compat.v1.Variable.eval用法及代码示例
- Python tf.compat.v1.train.FtrlOptimizer.compute_gradients用法及代码示例
- Python tf.compat.v1.layers.conv3d用法及代码示例
- Python tf.compat.v1.strings.length用法及代码示例
- Python tf.compat.v1.data.Dataset.snapshot用法及代码示例
- Python tf.compat.v1.data.experimental.SqlDataset.reduce用法及代码示例
- Python tf.compat.v1.feature_column.categorical_column_with_vocabulary_file用法及代码示例
- Python tf.compat.v1.data.TextLineDataset.from_tensors用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.make_template。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。