【发布时间】:2017-07-31 20:59:36
【问题描述】:
我正在尝试在 Keras 中制作一个自定义正则化器,我需要能够滚动系数数组。
我知道这可能是不可能的,但是任何可以复制此滚动功能的机制将不胜感激。
```
def __call__(self, x):
regularization = 0.
# Add components if they are given
if self.l1:
# \lambda ||x||
regularization += self.l1 * K.sum(K.abs(x))
if self.fuse:
# \lambda \sum{ |x - x_+1| }
regularization += self.fuse * K.sum(K.abs(x - np.roll(x, 1)))
if self.abs_fuse:
# \lambda \sum{ ||x| - |x_+1|| }
regularization += self.abs_fuse * K.sum(K.abs(K.abs(x) - K.abs(np.roll(x, 1))))
```
【问题讨论】:
-
x的维度是多少?如果x是一个矩阵,那么它可能有点奇怪。在权重矩阵上调用np.roll将首先展平矩阵,线性移动元素,最后将其重新整形为矩阵。这种行为正是您想要的,还是np.roll(x, 1, axis=1)? -
x 的维数始终为 (m, 1) 。而且我通过用 numpy 在玩具示例上对其进行测试知道,roll 是我正在寻找的行为
-
@Yu-Yang 编辑:
np.roll(x, 1, axis=1)在此示例中给出与np.roll(x, 1)相同的结果,但axis=1更明确。 -
我已经发布了一个可能的实现方式,请看看是否是你想要的。
标签: numpy tensorflow keras