在Keras使用numpy roll

时间:2017-07-31 20:59:37

标签: numpy tensorflow keras

我正在尝试在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))))

```

1 个答案:

答案 0 :(得分:1)

鉴于x形状(m, 1),可能的解决方案是使用tile

def roll_reg(x):
    length = K.int_shape(x)[0]
    x_tile = K.tile(x, [2, 1])
    x_roll = x_tile[length - 1:-1]
    return K.sum(K.abs(x - x_roll))

这将导致一些额外的内存使用,但如果x是1-dim向量,我猜测开销不会太糟糕。