创建尺寸更改的数据集迭代器?

时间:2019-06-06 20:01:04

标签: tensorflow tensorflow-datasets

我正在像这样在tensorflow中创建一个数据集迭代器:

iterator = tf.data.Iterator.from_structure(training_dataset.output_types, training_dataset.output_shapes)

training_dataset.output_shapes是

[TensorShape([Dimension(None), Dimension(48), Dimension(48), Dimension(3)])]

第一个维度为无,因为网络(EDSR)旨在接受固定大小的图像块。不同大小的输入图像将成为不同数量的色板,这是根据数据集API在预处理期间发生的步骤。进出的形状是:

(?, ?, 3) -> (?, 48, 48, 3)

如果迭代器代码仅被调用一次(如在单元测试中一样),则它将按预期运行。但是,如果调用两次,它将返回如下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 870912 values, but the requested shape has 1354752
     [[{{node create_image_swatches/Reshape}}]]
     [[{{node create_iterator/IteratorGetNext}}]]

我以前写过与此非常相似的代码。数据集迭代器将使用相同的语法和结构多次工作,但具有固定的第一维和可变的其他维,例如

[TensorShape([Dimension(1), Dimension(None), Dimension(None), Dimension(3)])]

数据集迭代器的第一个维度不能为可变大小是有原因的吗?

0 个答案:

没有答案