首页 > 解决方案 > 数据集输入到 1D Conv 层的形状困难

问题描述

我的网络的第一层是一个 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 代码,它似乎在期待 (None, 100, 28),但这对我来说似乎是错误的。呈现给层的每个元素都是 (100, 28)。“无”肯定只是表示它被多次调用。此外,您不能将 (None, 100, 28) 指定为图层的 input_shape,否则它会抱怨它只需要二维,而不是三个!

非常感谢,

朱利安

标签: pythontensorflowconv-neural-networktensorflow2.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))

这就是 1D Convnet 需要输入的内容。


推荐阅读