Update: TensorFlow now supports 1D convolution since version r0.11, using tf.nn.conv1d
.
Consider a basic example with an input of length 10
, and dimension 16
. The batch size is 32
. We therefore have a placeholder with input shape [batch_size, 10, 16]
.
batch_size = 32
x = tf.placeholder(tf.float32, [batch_size, 10, 16])
We then create a filter with width 3, and we take 16
channels as input, and output also 16
channels.
filter = tf.zeros([3, 16, 16]) # these should be real values, not 0
Finally we apply tf.nn.conv1d
with a stride and a padding:
s
SAME
and VALID
. SAME
will output the same input length, while VALID
will not add zero padding.For our example we take a stride of 2, and a valid padding.
output = tf.nn.conv1d(x, filter, stride=2, padding="VALID")
The output shape should be [batch_size, 4, 16]
.
With padding="SAME"
, we would have had an output shape of [batch_size, 5, 16]
.
For previous versions of TensorFlow, you can just use 2D convolutions while setting the height of the inputs and the filters to 1
.