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

如何在Keras中更改传播函数?Keras默认使用哪种传播函数?

关于Keras中传播函数的疑问解答

嘿,这个问题问到点子上了,我来给你一步步说清楚:

1. 能不能在Keras中更改传播函数或相关参数?

当然可以!Keras(尤其是现在的TensorFlow Keras)设计的核心就是灵活可扩展,完全支持自定义传播逻辑和参数。你只需要通过**自定义层(Custom Layer)**来实现自己想要的计算规则——不管是修改权重与输入的运算方式、调整偏置的使用,还是实现文献里那些特殊的传播函数,都能做到。

举个简单的例子,如果你想实现一个不带偏置、且权重做L2归一化的传播层,可以这么写:

import tensorflow as tf
from tensorflow.keras.layers import Layer

class CustomDense(Layer):
    def __init__(self, units, activation=None):
        super(CustomDense, self).__init__()
        self.units = units
        self.activation = tf.keras.activations.get(activation)

    def build(self, input_shape):
        # 初始化权重
        self.kernel = self.add_weight(
            shape=(input_shape[-1], self.units),
            initializer="glorot_uniform",
            trainable=True,
        )

    def call(self, inputs):
        # 对权重做L2归一化的自定义传播逻辑
        normalized_kernel = tf.nn.l2_normalize(self.kernel, axis=0)
        outputs = tf.matmul(inputs, normalized_kernel)
        if self.activation is not None:
            outputs = self.activation(outputs)
        return outputs

用这个自定义层替换默认的Dense层,就能实现你想要的特殊传播逻辑了。

2. Keras默认是不是用最简单的Input ij = aj*wij形式?

其实不完全是。Keras默认的Dense(全连接)层的核心计算是加权求和加偏置,公式是:
z = dot(input, kernel) + bias
这里的dot(input, kernel)本质就是对aj*wij做求和(矩阵乘法的行乘列求和),然后再加上偏置项bias。如果你不需要偏置,可以在初始化Dense层时设置use_bias=False,这时候就变成纯加权求和,但也不是单个aj*wij,而是求和后的结果。

3. Keras实际使用的是哪一种传播函数?

结合你提到的文献里的几种传播函数(比如带激活的加权求和、权重归一化后的计算等),Keras默认的Dense层对应的是基础的加权求和+可选激活函数的形式:

  • 如果不指定激活函数,输出就是Σw_ij x_j + b_i;
  • 如果指定了激活函数(比如sigmoid、relu),输出就是activation(Σw_ij x_j + b_i)。

至于文献里那些更复杂的传播函数(比如权重做归一化、加入其他正则项、特殊的求和规则等),Keras没有直接内置,但你可以通过自定义层轻松实现,就像上面的例子那样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:14