如何在 Tensorflow 2.0 中正确批处理 CsvDataset?

How to batch CsvDataset correctly in Tensorflow 2.0?

我正在使用 tf.data.experimental.make_csv_dataset 从 .csv 文件创建数据集。我还使用 tf.keras.layers.DenseFeatures 作为模型的输入层。

我正在努力正确创建一个 DenseFeatures 层,以便在 make_csv_datasetbatch_size 参数不等于 1 的情况下它与我的数据集兼容(在如果 batch_size=1 我的设置按预期工作的话)。

我使用 tf.feature_column.numeric_column 元素列表创建 DenseFeaturesshape=(my_batch_size,),但在这种情况下似乎由于某种原因输入层需要 [my_batch_size,my_batch_size] 形状而不是 [my_batch_size,1].

使用 my_batch_size=19 我在尝试拟合模型时遇到以下错误:

ValueError: Cannot reshape a tensor with 19 elements to shape [19,19] (361 elements) for 'MyModel/Input/MyColumn1/Reshape' (op: 'Reshape') with input shapes: [19,1], [2] and with input
tensors computed as partial shapes: input[1] = [19,19].

如果我在创建 numeric_column 时没有指定 shape 它也不起作用。我收到以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:  The second input must be a scalar, but it has shape [19]

假设 numeric_column 需要一个标量,但在 Tensor.

中接收了整批

如何创建 DenseFeatures 的输入层,以便它接受 make_csv_dataset(batch_size=my_batch_size) 生成的数据集?

来自 tf.feature_column.numeric_column 文档:

shape: An iterable of integers specifies the shape of the Tensor. An integer can be given which means a single dimension Tensor with given width. The Tensor representing the column will have the shape of [batch_size] + shape.

这意味着您不能将批量大小传递给 shape 参数:shape=().

目前,批处理大小为 1,TF 可以通过广播或类似的方式处理 shape=(1,)(如有必要,TF 可以轻松添加大小为 1 的维度),这就是它起作用的原因.

希望这对您有所帮助。如果您需要更多帮助,请提供更多代码。