'Transform input from data space to model space.
Args:
inputs: A Tensor with shape [batch, ...]
Returns:
body_input: A Tensor with shape [batch, ?, ?, body_input_depth].'

def bottom(self, inputs):

    with tf.variable_scope(self.name):
        def xnet_resblock(x, filters, res_relu, name):
            with tf.variable_scope(name):
                y = common_layers.separable_conv_block(x, filters, [((1, 1), (3, 3)), ((1, 1), (3, 3))], first_relu=True, padding='SAME', force2d=True, name='sep_conv_block')
                y = common_layers.pool(y, (3, 3), 'MAX', 'SAME', strides=(2, 1))
                return (y + common_layers.conv_block(x, filters, [((1, 1), (1, 1))], padding='SAME', strides=(2, 1), first_relu=res_relu, force2d=True, name='res_conv0'))
        x = tf.bitcast(inputs, tf.float32)
        x.set_shape([None, None, None, 1])
        for i in xrange(self._model_hparams.audio_compression):
            x = xnet_resblock(x, (2 ** (i + 1)), True, ('compress_block_%d' % i))
        return xnet_resblock(x, self._body_input_depth, False, 'compress_block_final')
