Keras делят веса между пользовательскими слоями - PullRequest
0 голосов
/ 21 марта 2019

Я работаю с реализацией Keras-Capsnet в Capsule Networks и пытаюсь применить один и тот же слой к 30 изображениям на образец.

Веса инициализируются в init ипостроить аргументы для класса, показанного ниже.Я успешно разделил веса между основными слоями маршрутизации, которые просто используют tf.layers.conv2d, где я могу назначить им одно и то же имя и установить reuse = True.

Кто-нибудь знает, как инициализировать веса в пользовательском слое Keras, чтобы их можно было использовать повторно?Я гораздо лучше знаком с API tenorflow, чем с Keras!

def __init__(self, num_capsule, dim_capsule, routings=3,
             kernel_initializer='glorot_uniform',
             **kwargs):
    super(CapsuleLayer, self).__init__(**kwargs)
    self.num_capsule = num_capsule
    self.dim_capsule = dim_capsule
    self.routings = routings
    self.kernel_initializer = initializers.get(kernel_initializer)

def build(self, input_shape):
    assert len(input_shape) >= 3, "The input Tensor should have shape=[None, input_num_capsule, input_dim_capsule]"
    self.input_num_capsule = input_shape[1]
    self.input_dim_capsule = input_shape[2]

    # Weights are initialized here each time the layer is called
    self.W = self.add_weight(shape=[self.num_capsule, self.input_num_capsule,
                                    self.dim_capsule, self.input_dim_capsule],
                             initializer=self.kernel_initializer,
                             name='W')
    self.built = True

1 Ответ

0 голосов
/ 21 марта 2019

Ответ был прост.Настройте слой, не вызывая его на входе, а затем используйте этот встроенный слой для индивидуального вызова данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...