tensorflow conv1d kernel size 维数错误

tensorflow conv1d kernel size dimensionality error

对一维数组进行一维卷积时,出现错误提示我的第二维不够大。

这里是相关代码的概述:

inputs_ = tf.placeholder(tf.float32 ,(None, 45), name='inputs')
x1 = tf.expand_dims(inputs_, axis=1)
x1 = tf.layers.conv1d(x1, filters=64, kernel_size=1, strides=1, padding='valid')

我希望将内核大小增加到 3,这样相邻点也会影响每个输入节点的输出,但是我得到以下错误:

ValueError: Negative dimension size caused by subtracting 3 from 1 for 'conv1d_4/convolution/Conv2D' (op: 'Conv2D') with input shapes: [?,1,1,45], [1,3,45,64].

我的猜测是,tensorflow 希望我将我的输入重塑为二维,以便可以使用一些深度来进行内核乘法。问题是为什么会这样,以及基于输入维度对层行为的期望

您需要添加一个 Channel 维度作为最后一个维度,即使您只有一个频道。 所以这段代码有效:

inputs_ = tf.placeholder(tf.float32 ,(None, 45), name='inputs')
x1 = tf.expand_dims(inputs_, axis=-1)
x1 = tf.layers.conv1d(x1, filters=64, kernel_size=3, strides=1, padding='valid')

基本上错误是因为你的张量看起来宽度为 1,有 45 个通道。 TensorFlow 试图在大小为 1 的维度上与大小为 3 的内核进行卷积。