如何在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)
回答:
你可以简单地这样做…
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 cinp = 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)