Слой H5py - невозможно создать ссылку («имя уже существует») после 1-й эпохи при использовании пользовательского слоя keras - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь построить блок RCL в Keras для повторяющейся сети свертки, как описано в статье: https://www.cv -foundation.org / openaccess / content_cvpr_2015 / paper / Liang_Recurrent_Convolutional_Neural_2015_CVPR_paper.pdf

Моя модель, использующая мой пользовательский слой keras, компилируется, однако, после запуска 1 эпохи при сохранении модели, я сталкиваюсь с ошибкой, выданной h5py:

h5py / _objects.pyx в h5py._objects.with_phil.wrapper ()

h5py / _objects.pyx в h5py._objects.with_phil.wrapper ()

h5py / h5o.pyx в h5py.h5o.link ()

RuntimeError: Невозможно создать ссылку (имя уже существует)

Я использую уже существующие слои keras внутри моего пользовательского слоя:

class Recurrent_block(tf.keras.layers.Layer):
    def __init__(self, ch_out,t):
        self.num_outputs = num_outputs
        self.t = t
        self.ch_out = ch_out
        super(Recurrent_block, self).__init__()

    def build(self, input_shape)
        self.shape = tf.TensorShape([input_shape[0].value,input_shape[1].value,input_shape[2].value,self.ch_out])
        self.fc = tf.keras.models.Sequential([tf.keras.layers.Conv2D(filters=self.ch_out, kernel_size=(3,3), strides=(1, 1), padding='same'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Activation('relu')])
        self.fc.build(self.shape)
        print(self.fc.trainable_weights)
        self._trainable_weights = self.fc.trainable_weights
        super(Recurrent_block, self).build(self.shape)

    def call(self,x):
        x = tf.keras.layers.Conv2D(self.ch_out,kernel_size=1,strides=(1, 1),padding='same')(x)
        for i in range(self.t+1):
            if i==0:               
                x1 = self.fc(x)

            x1 = self.fc(x+x1)
        return x1  

Может кто-нибудь помочь, пожалуйста, либо для устранения этой ошибки, либопросто помогите мне объединить несколько слоев keras в один пользовательский слой, а также изменить функцию вызова, как я это сделал.

...