我将在一层中使用锯齿激活函数并按如下方式进行定义:(锯齿函数的形式不是重要的组成部分,它是x的函数,在很多方面都是总和:sin(x) - 1⁄2sin(2x) + 1⁄3sin(3x) - 1⁄4sin(4x) + 1⁄5sin(5x) - 1⁄6sin(6x) + ...
,我已经使用过500个条款)。
def sawtooth1 (x):
I= K.arange (1, 500, dtype='float32')
out= K.sum(-K.sin(K.dot(I,(x+pi)))/I, axis= 1)
return out[0]
这适用于numpy。但是当我在这里使用此功能和输入形状时:
inputs = Input(shape=(1,))
saw = Dense(1, activation= sawtooth1)(inputs)
我收到有关Matmul输入形状的错误: ValueError: Shape must be rank 2 but is rank 1 for 'dense_1/MatMul_1' (op: 'MatMul') with input shapes: [499], [?,1].
我尝试了太多方法来解决此问题,但其中任何一个均无效。如何在Keras后端做matmul?
即使在注释部分中提供了解决方案(答案部分),也可以为社区带来利益。
添加I = I[:, None]
到sawtooth1
功能后已解决该问题。
这是更新的代码
def sawtooth1 (x):
I= K.arange (1, 500, dtype='float32')
I = I[:, None]
out= K.sum(-K.sin(K.dot(I,(x+np.pi)))/I, axis= 1)
return out[0]
inputs = Input(shape=(1,))
saw = Dense(1, activation= sawtooth1)(inputs)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句