Я пытаюсь реализовать 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.
Спасибо за помощь, и извините за мой английский, если я не был понятен