Tensorflow: как выполнить пакетную обработку данных с помощью набора данных, созданного с использованием массива numpy? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь понять поведение 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 из X и y одинаковы независимо от того, применяю ли я *Функция 1020 * для набора данных.
  • Изменение формы, которую я передаю в заполнители (скажем, путем замены None на batch_size), также не меняет поведение.

Спасибодля предложений / исправлений и т. д.

1 Ответ

1 голос
/ 23 мая 2019

Чтобы принять во внимание размер партии, вам необходимо изменить следующие значения

dataset.batch(batch_size)

на

dataset = dataset.batch(batch_size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...