Я ищу противоположность функций: BatchNormalization, LeakyRelu, Lamda и Reshape, чтобы де визуализация для моего CNN - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь реализовать DeconvNet для визуализации моего CNN, чтобы увидеть, какие функции ищут разные уровни в моей сети, и для этого мне нужны обратные функции, используемые в сети (например, Relu,BatchNormalization).

Вы можете проверить этот документ, чтобы понять, что я пытаюсь сделать: https://arxiv.org/abs/1311.2901

Это код деконволюции, который я нашел в Интернете:

Class DConvolution2D(object):

    def __init__(self, layer):

        self.layer = layer

        weights = layer.get_weights()
        W = weights[0]
        b = weights[1]


        filters = W.shape[3]
        up_row = W.shape[0]
        up_col = W.shape[1]
        input_img = keras.layers.Input(shape = layer.input_shape[1:])

        output=keras.layers.Conv2D(filters,(up_row,up_col),kernel_initializer=tf.constant_initializer(W),
                                   bias_initializer=tf.constant_initializer(b),padding='same')(input_img)
        self.up_func = K.function([input_img, K.learning_phase()], [output])
        # Deconv filter (exchange no of filters and depth of each filter)
        W = np.transpose(W, (0,1,3,2))
        # Reverse columns and rows
        W = W[::-1, ::-1,:,:]
        down_filters = W.shape[3]
        down_row = W.shape[0]
        down_col = W.shape[1]
        b = np.zeros(down_filters)
        input_d = keras.layers.Input(shape = layer.output_shape[1:])

        output=keras.layers.Conv2D(down_filters,(down_row,down_col),kernel_initializer=tf.constant_initializer(W),
                                   bias_initializer=tf.constant_initializer(b),padding='same')(input_d)
        self.down_func = K.function([input_d, K.learning_phase()], [output])

    def up(self, data, learning_phase = 0):
        #Forward pass
        self.up_data = self.up_func([data, learning_phase])
        self.up_data=np.squeeze(self.up_data,axis=0)
        self.up_data=numpy.expand_dims(self.up_data,axis=0)
        #print(self.up_data.shape)
        return self.up_data

    def down(self, data, learning_phase = 0):
        # Backward pass
        self.down_data= self.down_func([data, learning_phase])
        self.down_data=np.squeeze(self.down_data,axis=0)
        self.down_data=numpy.expand_dims(self.down_data,axis=0)
        #print(self.down_data.shape)
        return self.down_data

Так что я собираюсь сделать то же самое с другой функцией в архитектуре YOLO.

Спасибо за помощь, и извините за мой английский, если я не был понятен

...