看着第三方的层实现,例如tensorflow_addons
,我看到每个层都被注册为自定义对象。
例如,您可以看到包装器register_custom_keras_object
调用here的使用。
此包装器使用功能tf.keras.utils.get_custom_objects()
进行注册。
我的问题是,为什么要对任何自定义图层执行此操作?将图层注册为自定义对象有什么好处?
答案 0 :(得分:1)
这样做可以让您通过字符串引用自定义对象。您始终会看到keras默认对象。例如:
# You can either compile a model with the Adam optimizer like this
model.compile(optimizer='adam', ...)
# or like this
adam = keras.optimizers.Adam()
model.compile(optimizer=adam, ...)
取自definition of custom_object_scope
:
with
语句中的代码将能够按名称访问自定义对象。对全局自定义对象的更改将保留在封闭的with
语句中。在with
语句结束时,全局自定义对象将恢复为with
语句开始处的状态。
示例:考虑一个自定义对象MyObject
with custom_object_scope({'MyObject':MyObject}):
layer = Dense(..., kernel_regularizer='MyObject')
# save, load, etc. will recognize custom object by name
定义为
def custom_object_scope(*args)
参数:
*args
:名称字典的可变长度列表,要添加到自定义对象的类对。