我的网络的第一层是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,否则会抱怨它只需要二维,而不是三维!
非常感谢,
朱利安
答案 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输入所需的内容。