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

能否在Keras中创建含额外参数的自定义正则化项?

自定义Keras正则化项的正确实现方式

当然可以创建这类自定义正则化项!不过你当前的写法有个小问题——Keras的正则化器接口默认只接受权重矩阵这一个输入参数,而你的customized_regularizer还需要parameterA和parameterB两个额外参数,直接作为kernel_regularizer传入会触发参数不匹配的错误。

下面给你两种可行的修复方案,按需选择:

方法1:用闭包包装参数(简洁首选)

通过闭包把额外参数“封装”进去,返回一个符合Keras要求的、仅接收权重矩阵的函数:

import keras.backend as K
from keras.layers import Dense

def customized_regularizer(parameterA, parameterB):
    def regularizer(weight_matrix):
        # 确保计算结果是标量损失张量,你的sum操作已经满足要求
        return K.sum(K.dot(parameterA, weight_matrix) - parameterB)
    return regularizer

# 使用时先传入自定义参数,得到符合接口要求的正则化器
model.add(Dense(64, input_dim=64, kernel_regularizer=customized_regularizer(your_paramA, your_paramB)))

方法2:继承Regularizer类(适合复杂场景)

如果需要支持模型保存/加载时保留正则化器参数,或者有更复杂的逻辑,可以继承Keras内置的Regularizer类:

import keras.backend as K
from keras.layers import Dense
from keras.regularizers import Regularizer

class CustomRegularizer(Regularizer):
    def __init__(self, parameterA, parameterB):
        # 把参数转为Keras张量,确保计算兼容
        self.parameterA = K.constant(parameterA)
        self.parameterB = K.constant(parameterB)
    
    def __call__(self, weight_matrix):
        return K.sum(K.dot(self.parameterA, weight_matrix) - self.parameterB)
    
    # 可选:实现get_config方法,让模型保存时能记录正则化器参数
    def get_config(self):
        return {
            'parameterA': self.parameterA.numpy(),
            'parameterB': self.parameterB.numpy()
        }

# 使用方式
model.add(Dense(64, input_dim=64, kernel_regularizer=CustomRegularizer(your_paramA, your_paramB)))

额外提醒

  • 要确保parameterA和parameterB的维度与权重矩阵匹配,避免K.dot()出现维度不兼容的错误;
  • 正则化项的返回值必须是标量张量,你的K.sum()操作已经满足这个要求,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:07:51