【发布时间】:2019-09-25 08:32:28
【问题描述】:
我是 Keras 的新手,正在尝试使用具有可训练参数的自定义激活函数进行一些实验。我创建了下面的代码,它本质上是 ReLU 激活函数的变体。它目前计算alpha*h1 + (1 - alpha)*h2,其中h1 = relu(x) 和h2 = relu(-x),希望帮助处理常规ReLU 函数可以创建的死神经元。我想知道是否可以修改此代码以生成一个可训练参数向量来进一步测试这个想法,而不是仅仅拥有一个可训练参数alpha。任何建议或帮助将不胜感激。
class CustomLayer(Layer):
def __init__(self, alpha, **kwargs):
self.alpha = alpha
super(CustomLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.alpha),
initializer='uniform',
trainable=True)
super(CustomLayer, self).build(input_shape)
def call(self,x):
h1 = K.relu(x)
h2 = K.relu(-x)
return self.kernal*h1 + (1 - self.kernal)*h2
def compute_output_shape(self, input_shape):
return (input_shape[0], self.alpha)
【问题讨论】:
-
我想我修复了您代码中的缩进,但请查看并确定。另外,在此处发布代码时需要注意:缩进在 Python 中很重要;检查它是否正确。
-
shape=(..., self.alpha)有意义吗? Shape 接受一个整数元组,我不觉得这是alpha应该用于的。 -
@Engineero 谢谢,现在缩进是正确的。另外,对于你的另一个问题。我试图在 Keras 的网站上模仿他们在 keras.io/layers/writing-your-own-keras-layers 上所做的事情,但可能实施不正确。
-
是的,在示例中,您将输入链接到层仍然是一个维度,因此将其传递给
shape参数是有意义的。在这种情况下,这是没有意义的,因为alpha是一个(可能是浮点)参数,而不是描述数据形状的东西。
标签: python parameters keras activation