Написать свой собственный слой keras

Я хочу написать свой собственный слой keras, взяв в качестве входных данных тензор с формой (nb_batch, input_dim) и создав тензор с формой (nb_batch, context_size, output_dim). Я написал демо ниже:

class MyLayer(Layer):
def __init__(self, output_dim, context_size, init="uniform", **kwargs):
    self.output_dim = output_dim
    self.context_size = context_size
    self.init = initializations.get(init)
    super(MyLayer, self).__init__(**kwargs)

def build(self, input_shape):
    input_dim = input_shape[1]
    self.W_vec = self.init(
        (self.context_size, input_dim, self.output_dim),
        name="W_vec")

    self.trainable_weights = [self.W_vec]
    super(MyLayer, self).build()  # be sure you call this somewhere!

def call(self, x, mask=None):
    return K.dot(x, self.W_vec)
    # return K.dot(x, self.W)

def get_output_shape_for(self, input_shape):
    return (input_shape[0], self.context_size, self.output_dim)

когда я запустил его, получил ошибку «TypeError: build () принимает ровно 2 аргумента (1 указан)» enter code here


person Hungry fool    schedule 30.11.2016    source источник


Ответы (1)


Похоже, сборке нужен входной аргумент формы

super(MyLayer, self).build(input_shape) # be sure you call this somewhere!

person naveen sr    schedule 20.01.2017