创建自定义图层时,Keras自定义对象的目的是什么?

时间:2019-06-26 07:43:12

标签: tensorflow keras

看着第三方的层实现,例如tensorflow_addons,我看到每个层都被注册为自定义对象。 例如,您可以看到包装器register_custom_keras_object调用here的使用。

此包装器使用功能tf.keras.utils.get_custom_objects()进行注册。

我的问题是,为什么要对任何自定义图层执行此操作?将图层注册为自定义对象有什么好处?

1 个答案:

答案 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:名称字典的可变长度列表,要添加到自定义对象的类对。