如何在 keras 中定义一个需要额外参数的激活函数。 我最初的自定义激活函数是一个函数,它根据 N 度的多项式生成点。输入是多项式的系数。它看起来像这样:
def poly_transfer(x):
a = np.arange(0, 1.05, 0.05)
b = []
for i in range(x.shape[1]):
b.append(a**i)
b = np.asarray(b)
b = b.astype(np.float32)
c = matmul(x,b)
return c
现在我想从函数外部设置输出的长度。有点像这样:
def poly_transfer(x, lenght):
a = np.arange(0, lenght + 0.05, 0.05)
b = []
for i in range(x.shape[1]):
b.append(a**i)
b = np.asarray(b)
b = b.astype(np.float32)
c = matmul(x,b)
return c
我如何实现这个功能以及如何使用它? 目前:
speed_out = Lambda(poly_transfer)(speed_concat_layer)
正如我想象的那样:
speed_out = Lambda(poly_transfer(lenght=lenght))(speed_concat_layer)
答案 0 :(得分:1)
您可以使用 functools.partial
来柯里化函数:
from functools import partial
poly_transfer_set_length = partial(poly_transfer, lenght=lenght)
speed_out = Lambda(poly_transfer_set_length)(speed_concat_layer)
或使用 lambda
函数:
speed_out = Lambda(lambda x: poly_transfer(x, lenght=lenght))(speed_concat_layer)
答案 1 :(得分:1)
你可以用这种方式简单地做...
X = np.random.uniform(0,1, (100,10))
y = np.random.uniform(0,1, (100,))
def poly_transfer(x, lenght):
a = np.arange(0, lenght + 0.05, 0.05)
b = []
for i in range(x.shape[1]):
b.append(a**i)
b = tf.constant(np.asarray(b), dtype=tf.float32)
c = tf.matmul(x, b)
return c
inp = Input((10,))
poly = Lambda(lambda x: poly_transfer(x, lenght=1))(inp)
out = Dense(1)(poly)
model = Model(inp, out)
model.compile('adam', 'mse')
model.fit(X, y, epochs=3)