Я работаю с реализацией 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