Я пытаюсь понять поведение 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
), также не меняет поведение.
Спасибодля предложений / исправлений и т. д.