【问题标题】:RBF Layer - difficulty in understandingRBF 层 - 难以理解
【发布时间】:2021-06-19 09:13:02
【问题描述】:

我想实现一个 RBFN,并在 StackOverflow 上找到了这段代码。虽然我确实理解了一些代码,但我不明白 gammakwargs 和整个 call 函数是什么。 谁能给我解释一下?

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

class RBFLayer(Layer):
    def __init__(self, units, gamma, **kwargs):
        super(RBFLayer, self).__init__(**kwargs)
        self.units = units
        self.gamma = K.cast_to_floatx(gamma)
def build(self, input_shape):
    self.mu = self.add_weight(name='mu',
                              shape=(int(input_shape[1]), self.units),
                              initializer='uniform',
                              trainable=True)
    super(RBFLayer, self).build(input_shape)

def call(self, inputs):
    diff = K.expand_dims(inputs) - self.mu
    l2 = K.sum(K.pow(diff,2), axis=1)
    res = K.exp(-1 * self.gamma * l2)
    return res

def compute_output_shape(self, input_shape):
    return (input_shape[0], self.units)

【问题讨论】:

    标签: python tensorflow machine-learning deep-learning neural-network


    【解决方案1】:

    Gamma:根据文档:gamma 参数定义了单个训练示例的影响范围,低值表示“远”,高值表示“接近”。模型的行为对gamma 参数非常敏感。当gamma 非常小时,模型过于受限,无法捕捉数据的复杂性或“形状”。这是一个超参数。

    kwargs**kwargs 用于让函数采用任意数量的关键字参数。 Details.

    调用:在调用函数中,您正在计算径向基函数内核,即。 RBF核,定义如下。

    source.

    分子部分的计算:

    diff = K.expand_dims(inputs) - self.mu
    l2 = K.sum(K.pow(diff,2), axis=1)
    

    分母部分的计算:

    res = K.exp(-1 * self.gamma * l2)
    

    self.gamma可以表示如下

    【讨论】:

    • 嗨,self.mu 是什么?
    • 有什么问题?你的意思是self的目的是什么?或self.mu,这只是训练变量,即。 x' 在公式中。
    • 好吧,我明白了。
    • 感谢您的回答。我已将赏金授予此答案。
    猜你喜欢
    • 2010-10-28
    • 2014-11-15
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多