<p>Use the idea originally proposed in <a href="https://arxiv.org/abs/1412.6806" rel="nofollow noreferrer">All Convolutional Net</a> paper and later extensively used in <a href="https://stackoverflow.com/q/39366271/712995">Inception network</a>, i.e. apply convolution for dimensionality reduction. </p>

<p>The trick is to perform convolution with a unit <code>filter</code> (<code>1x1</code> for 2-D convolution, <code>1x1x1</code> for 3-D and so on) with a smaller number of filters. Nowadays, this trick is applied all the time to save computation in very deep convolutional networks, so you can use it before convolutional layers as well. In your question, the output tensor is one-dimensional (except batch size), so use 1-D convolution with <code>1</code> kernel size.</p>

<p>Here's the code in tensorflow, which reduces the tensor length from 64 to 32:</p>

<pre><code>                              # `x` shape:  [batch, length] = [?, 64]
layer = tf.expand_dims(x, 2)  # reshape to: [batch, channels, 1] = [?, 64, 1]

output = tf.layers.conv1d(layer, filters=32, kernel_size=1,
                          strides=1, padding='valid',
                          data_format='channels_first')

                              # new shape:  [batch, filters, 1] = [?, 32, 1]
output = tf.squeeze(output)   # reshape to: [batch, length] = [?, 32]
</code></pre>
Convolution to reduce dimensionality of one dimensional vector
<p>In a CNN, if the output is a one dimensional vector(say, a pre-logit layer), how would one reduce the dimensionality down to a specified size, using only convolutions? </p>

<p>How does one derive the filter dimensions/receptive field to accomplish such a task?</p>

<p>I am aware that this can be achieved by stacking a fully connected layer on the end of the network, but this does not seem so elegant.</p>