Tensorflow:如何批处理由numpy数组构建的数据集?

时间:2019-05-22 21:57:11

标签: python tensorflow shapes tensorflow-datasets

我正在尝试了解Dataset.batch的行为。这是我用来尝试通过基于Dataset数组的numpy在批处理数据上设置迭代器的代码。

    ## experiment with a numpy dataset
    sample_size = 100000
    ncols = 15
    batch_size = 1000
    xarr = np.ones([sample_size, ncols]) * [i for i in range(ncols)]
    xarr = xarr + np.random.normal(scale = 0.5, size = xarr.shape)
    yarr = np.sum(xarr, axis = 1)
    self.x_placeholder = tf.placeholder(xarr.dtype, [None, ncols])
    self.y_placeholder = tf.placeholder(yarr.dtype, [None, 1])

    dataset = tf.data.Dataset.from_tensor_slices((self.x_placeholder, self.y_placeholder))
    dataset.batch(batch_size)
    self.iterator  = dataset.make_initializable_iterator()

    X, y  = self.iterator.get_next()

但是,当我检查X和y的形状时

(Pdb) X.shape
TensorShape([Dimension(15)])
(Pdb) y.shape
TensorShape([Dimension(1)])

这使我感到困惑,因为似乎没有考虑到我的批次大小。由于我希望X和y具有两个维度,因此在构建模型时也会在下游产生问题,第一个维度是批处理中的示例数。

问题:为什么迭代器的输出是一维的?我应该如何正确地批处理?

这是我尝试过的:

  • 无论我是否对数据集应用shapes函数,Xy的{​​{1}}都是相同的。
  • 更改我输入到占位符的形状(例如,将batch替换为None)也不会改变行为。

感谢建议/更正等。

1 个答案:

答案 0 :(得分:1)

为了考虑批次大小,您需要更改以下内容

dataset.batch(batch_size)

dataset = dataset.batch(batch_size)