'Estimate filters for convolution layers
Args:
theta: angle of filter
kernel_shape: size of each filter
Returns:
learned filter as [B, k, k, 1]'

def _parameter_net(self, theta, kernel_shape=9):

    with argscope(LeakyReLU, alpha=0.2):
        with argscope(FullyConnected, nl=LeakyReLU):
            net = FullyConnected('fc1', theta, 64)
            net = FullyConnected('fc2', net, 128)
    pred_filter = FullyConnected('fc3', net, (kernel_shape ** 2), nl=tf.identity)
    pred_filter = tf.reshape(pred_filter, [BATCH, kernel_shape, kernel_shape, 1], name='pred_filter')
    logger.info('Parameter    net    output:    {}'.format(pred_filter.get_shape().as_list()))
    return pred_filter
