посоветуйте для отладки операций `tf.data.Dataset` в tenorflow 2.0 - PullRequest
1 голос
/ 15 мая 2019

Что эквивалентно df.head() Panda для наборов данных tf?

Следуя документации здесь Я построил следующие примеры игрушек:

dset = tf.data.Dataset.from_tensor_slices((tf.constant([1.,2.,3.]), tf.constant([4.,4.,4.]), tf.constant([5.,6.,7.])))
print(dset)

выводит

<TensorSliceDataset shapes: ((), (), ()), types: (tf.float32, tf.float32, tf.float32)>

Я бы предпочел получить что-то похожее на тензор , поэтому для получения некоторых значений я сделаю итератор.

dset_iter = dset.__iter__()
print(dset_iter.next())

выходы

(<tf.Tensor: id=122, shape=(), dtype=float32, numpy=1.0>,
 <tf.Tensor: id=123, shape=(), dtype=float32, numpy=4.0>,
 <tf.Tensor: id=124, shape=(), dtype=float32, numpy=5.0>)

Пока все хорошо.Давайте попробуем немного окон ...

windowed = dset.window(2)
print(windowed)

output

<WindowDataset shapes: (<tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b25c0>, <tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b27b8>, <tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b29b0>), types: (<tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b25c0>, <tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b27b8>, <tensorflow.python.data.ops.dataset_ops.DatasetStructure object at 0x1349b29b0>)>

Хорошо, снова воспользуйтесь трюком итератора:

windowed_iter = windowed.__iter__()
windowed_iter.next()

output

(<_VariantDataset shapes: (), types: tf.float32>,
 <_VariantDataset shapes: (), types: tf.float32>,
 <_VariantDataset shapes: (), types: tf.float32>)

Что?Итератор WindowDataset возвращает кортеж других объектов набора данных?
Я бы ожидал, что первым элементом в этом WindowDataset будет тензор со значениями [[1., 4., 5.], [2., 4., 6].].Может быть, это все еще верно, но это не совсем очевидно для меня из этого трех наборов данных.Хорошо.Давайте получим их итераторов ...

vd = windowed_iter.get_next()
vd0, vd1, vd2 = vd[0], vd[1], vd[2]
vd0i, vd1i, vd2i = vd0.__iter__(), vd1.__iter__(), vd2.__iter__()
print(vd0i.next(), vd1i.next(), vd2i.next())

output

(<tf.Tensor: id=357, shape=(), dtype=float32, numpy=1.0>,
 <tf.Tensor: id=358, shape=(), dtype=float32, numpy=4.0>,
 <tf.Tensor: id=359, shape=(), dtype=float32, numpy=5.0>)

Как вы можете видеть, этот рабочий процесс быстро превращается в беспорядок.Мне нравится, как Tf2.0 пытается сделать фреймворк более интерактивным и питонным.Есть ли хорошие примеры API данных, соответствующих этому видению?

...