难以将数据集的形状输入到 1D Conv 层
Difficulty with shape of dataset input to 1D Conv layer
我的网络第一层是一个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" 肯定只是代表它被调用了很多次。此外,您不能将 (None, 100, 28) 指定为层的 input_shape,否则它会抱怨它只需要两个维度,而不是三个维度!
非常感谢,
朱利安
我对数据集的误解。我的数据集本身具有 (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 需要的输入。
我的网络第一层是一个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" 肯定只是代表它被调用了很多次。此外,您不能将 (None, 100, 28) 指定为层的 input_shape,否则它会抱怨它只需要两个维度,而不是三个维度!
非常感谢,
朱利安
我对数据集的误解。我的数据集本身具有 (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 需要的输入。