You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keras牛津宠物分割代码出现CustomMaskWarning如何解决

自定义掩码层警告(CustomMaskWarning)消除方案

警告翻译

/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/utils/generic_utils.py:497: 自定义掩码层警告:自定义掩码层需要配置,并且必须重写get_config方法。加载模型时,必须将自定义掩码层传入custom_objects参数。
类别=CustomMaskWarning

触发原因

该警告是Keras在序列化(保存)模型时检测到代码中使用了自定义层,而自定义层未显式实现参数序列化方法导致的,不处理的话后续加载保存的模型时会直接报错。

永久解决方法

1. 给所有自定义层补充get_config方法

以代码中常用的自定义数据增强层为例,修改前后的代码如下:
修改前:

class Augment(tf.keras.layers.Layer):
    def __init__(self, seed=42):
        super().__init__()
        self.augment_inputs = tf.keras.layers.RandomFlip(mode="horizontal", seed=seed)
        self.augment_labels = tf.keras.layers.RandomFlip(mode="horizontal", seed=seed)

    def call(self, inputs, labels):
        inputs = self.augment_inputs(inputs)
        labels = self.augment_labels(labels)
        return inputs, labels

修改后:

class Augment(tf.keras.layers.Layer):
    def __init__(self, seed=42, **kwargs):
        # 补充传入父类初始化参数
        super().__init__(**kwargs)
        # 将初始化参数存为实例属性
        self.seed = seed
        self.augment_inputs = tf.keras.layers.RandomFlip(mode="horizontal", seed=seed)
        self.augment_labels = tf.keras.layers.RandomFlip(mode="horizontal", seed=seed)

    def call(self, inputs, labels):
        inputs = self.augment_inputs(inputs)
        labels = self.augment_labels(labels)
        return inputs, labels

    # 新增参数序列化方法
    def get_config(self):
        config = super().get_config()
        # 将自定义参数加入配置
        config.update({
            "seed": self.seed
        })
        return config

如果有其他自定义层,按照相同逻辑修改即可:将__init__的自定义参数都存为实例属性,在get_config中把参数写入配置字典。

2. (可选)注册自定义层简化加载流程

给自定义层加注册装饰器,后续加载模型时不需要额外传参数:

@tf.keras.utils.register_keras_serializable()
class Augment(tf.keras.layers.Layer):
    # 其余代码和上面修改后的版本一致

3. 加载模型时适配自定义层

如果没有做注册,加载模型时需要手动传入自定义对象:

model = tf.keras.models.load_model("你的模型保存路径.h5", custom_objects={"Augment": Augment})

临时解决方法

如果暂时不需要保存模型,只想屏蔽警告,可以在代码开头加入以下内容:

import warnings
from tensorflow.python.keras.utils.generic_utils import CustomMaskWarning

warnings.filterwarnings("ignore", category=CustomMaskWarning)

内容的提问来源于stack exchange,提问作者Kaylee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 09:03:00