难以将数据集的形状输入到1D转换层

时间:2019-10-03 14:35:13

标签: python tensorflow conv-neural-network tensorflow2.0

我的网络的第一层是Conv1D,如下所示:

Conv1D(128, 9, activation='relu', input_shape=(100, 28))

我的输入数据由输入形状为(100,28)的元素组成。即我的数据集由n个元素组成,每个元素都有一个标签。标签是长度为15的单发数组。

我的数据集上.element_spec的输出给出:

(TensorSpec(shape=(100, 28), dtype=tf.float32, name=None),
 TensorSpec(shape=(15,), dtype=tf.int32, name=None))

这看起来很一致,但是在模型上运行.fit()会出现此错误:

Error when checking input: expected conv1d_18_input to have 3 dimensions, but got array with shape (100, 28)

我在这里做错了什么?顺便说一句,这是TensorFlow 2.0。

编辑:如果我逐步执行tf代码,似乎正在期望(无,100、28),但这对我来说似乎是错误的。呈现给该层的每个元素为(100,28)。 “无”肯定表示它被多次调用。另外,您不能指定(None,100,28)作为图层的input_shape,否则会抱怨它只需要二维,而不是三维!

非常感谢,

朱利安

1 个答案:

答案 0 :(得分:0)

我在这里的误解是与数据集有关。我的数据集本身具有(100,28)的各个元素。我需要做的是将.batch(32)应用于数据集。这产生了(None,100,28),这是必需的。该批处理数据集上.element_spec的输出为:

<class 'tuple'>: (TensorSpec(shape=(None, 100, 3), dtype=tf.float32, name=None), TensorSpec(shape=(None, 5), dtype=tf.int32, name=None))

这是一维Convnet输入所需的内容。