def __init__(self, layer): ''' # Arguments layer: an instance of Convolution2D layer, whose configuration will be used to initiate DConvolution2D(input_shape, output_shape, weights) ''' self.layer = layer weights = layer.get_weights() W, b = weights config = layer.get_config() # Set up_func for DConvolution2D input = Input(shape=layer.input_shape[1:]) output = Convolution2D.from_config(config)(input) up_func = Model(input, output) up_func.layers[1].set_weights(weights) self.up_func = up_func # Flip W horizontally and vertically, # and set down_func for DConvolution2D W = np.transpose(W, (0, 1, 3, 2)) W = W[::-1, ::-1, :, :] config['filters'] = W.shape[3] config['kernel_size'] = (W.shape[0], W.shape[1]) b = np.zeros(config['filters']) input = Input(shape=layer.output_shape[1:]) output = Convolution2D.from_config(config)(input) down_func = Model(input, output) down_func.layers[1].set_weights((W, b)) self.down_func = down_func