【问题标题】:Difficulty with shape of dataset input to 1D Conv layer数据集输入到 1D Conv 层的形状困难
【发布时间】:2019-10-03 14:35:13
【问题描述】:

我的网络的第一层是一个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,否则它会抱怨它只需要二维,而不是三个!

非常感谢,

朱利安

【问题讨论】:

  • 您介意指定您使用的语言吗?
  • 语言是 Python 3.6
  • 感谢您的指点,但我认为这是一个不同的问题。该答案需要将输入从 (590, 30) 重塑为 (590, 30, 1)。即(记录数、时间单位数、特征数)。 (30, 1) 然后用作输入形状。就我而言,我已经有 (n, 100, 28)。我尝试使用 (100, 28) 作为输入形状,这就是我得到错误的时候。

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


【解决方案1】:

我在这里的误解是关于数据集。我的数据集本身具有 (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 需要输入的内容。

【讨论】:

    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多