在自定义keras层中初始化和访问权重数组

时间:2019-03-07 09:31:03

标签: keras

我正在为傅立叶域的cnn架构中的卷积编写自定义keras层:

class Fourier_Conv2D(Layer):
def __init__(self, no_of_kernels, **kwargs):
    self.no_of_kernels = no_of_kernels
    super(Fourier_Conv2D, self).__init__(**kwargs)

def build(self, input_shape):
    self.kernel = self.add_weight(name = 'kernel', 
                                  shape = input_shape + (self.no_of_kernels,), 
                                  initializer = 'uniform', trainable = True)
    super(Fourier_Conv2D, self).build(input_shape)

def call(self, x):
    return K.dot(x, self.kernel[0]) 

在调用函数中,我需要对输入的fft与每个内核的fft进行逐点乘法(根据convolution theorem)并在将这个和传递给激活函数之前将乘积相加。但是我该如何在调用函数中分别访问每个权重,因为使用数组索引这样做会产生以下属性错误-

AttributeError                            Traceback (most recent call last)
<ipython-input-71-9617a8e7ab2e> in <module>()
      1 x = Fourier_Conv2D(5)
----> 2 x.call((2,2,1))

<ipython-input-70-02ded53b8f6f> in call(self, x)
     11 
     12     def call(self, x):
---> 13         return K.dot(x, self.kernel[0])
     14 

AttributeError: 'Fourier_Conv2D' object has no attribute 'kernel'

在此感谢您为解决错误提供的任何帮助。

0 个答案:

没有答案