RBF层 - 理解困难

3

我想要实现一个RBFN,在StackOverflow上找到了这段代码。虽然我理解一些代码,但我不明白gamma, kwargs和整个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)
1个回答

2

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

kwargs**kwargs用于使函数接受任意数量的关键字参数。详情

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

来源

分子部分的计算:

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 可以表示为以下内容:


1
嗨,self.mu是什么? - Jerry
什么问题?你是指self的目的吗?还是self.mu,它只是训练变量,即公式中的x' - Innat
啊,好的,我明白了。 - Jerry
1
谢谢你的回答。我已经把奖励给了这个答案。 - Jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接