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

如何为TensorFlow 2.0中Keras Sequential模型的层添加自定义名称

在TensorFlow Keras Sequential模型中设置并保留自定义层名称

看起来你遇到的问题是明明给Flatten层指定了自定义名称bla,但在另一个文件加载模型后,层名却变成了默认的flatten。这大概率是因为你在另一个文件中调用的create_model()函数里,没有给Flatten层设置相同的name参数——当你用save_weights_only=True保存权重时,权重文件只存储权重数值,不会记录模型结构和层名称,所以加载权重时完全依赖你重新创建的模型结构,层名称会以新创建的模型为准。

下面是具体的解决方法:

  • 统一所有场景下的模型层名称
    不管是训练模型的文件,还是加载模型的文件,你的create_model()函数里的对应层必须明确设置相同的name参数。比如你的Flatten层必须保留name="bla":

    def create_model():
        model = keras.Sequential([
            # 务必保留自定义name参数
            keras.layers.Flatten(input_shape=(28,28), name="bla"),
            keras.layers.Dense(128, kernel_regularizer=keras.regularizers.l2(REGULARIZE), activation="relu"),
            keras.layers.Dropout(DROPOUT_RATE),
            keras.layers.Dense(128, kernel_regularizer=keras.regularizers.l2(REGULARIZE), activation="relu"),
            keras.layers.Dropout(DROPOUT_RATE),
            keras.layers.Dense(10, activation="softmax")
        ])
        model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
        return model
    

    这样,无论在哪个文件调用create_model()生成模型,Flatten层的名称都会是bla,加载权重后提取层名就能得到你预期的结果。

  • 验证层名称是否生效
    你可以在创建模型后立刻打印层名,确认自定义名称是否正确设置:

    model = create_model()
    print([layer.name for layer in model.layers])
    # 预期输出: ['bla', 'dense', 'dropout', 'dense_1', 'dropout_1', 'dense_2']
    

    如果输出里没有bla,说明你的create_model()函数里确实遗漏了name参数,补加上即可。

  • 可选:保存完整模型来避免结构不一致问题
    如果你不想手动维护多个文件中的模型结构一致,可以选择保存完整模型(而非仅权重),这样加载时不需要重新定义create_model(),直接加载就能保留所有层的自定义名称:

    # 训练时保存完整模型
    model.save("my_mnist_model.h5")
    
    # 加载时直接读取完整模型
    from tensorflow import keras
    model = keras.models.load_model("my_mnist_model.h5")
    print([layer.name for layer in model.layers])  # 会包含你设置的'bla'
    

    这种方式更省心,适合需要保留完整模型配置的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:27:50