tf.data.Dataset.list_files, как перебирать тензор с помощью декоратора @ tf.function - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь как можно больше использовать tf API (tf версии 2.x) в моем блокноте jupyter даже для обычных операций обработки строк.

В частности, я получаю список файлов в папке через метод tf.data.Dataset.list_files

import tensorflow as tf
import os

extension = '*.png'
myFolder = 'myFolder'
pathFiles = tf.data.Dataset.list_files(os.path.join(myFolder,extension))

Теперь pathFiles является

и type (pathFiles) возвращает тензорный поток. python .data.ops.dataset_ops.TensorSliceDataset.

Я могу получить доступ к первому элементу таким образом, чтобы выполнять все свои операции:

element = next(iter(pathFiles))
element.numpy().decode("utf-8")
...

Я проделываю ту же операцию над всем тензором через a for l oop. Т.е.

for i in pathFiles:
    i.numpy().decode("utf-8")
    print(i,type(i))
    ...

или:

for i in iter(pathFiles):
    i.numpy().decode("utf-8")
    print(i,type(i))
    ...

Однако, как только я определяю функцию, а затем украшаю ее @ tf.function. Я получаю зашитые штуки, с которыми не могу справиться без декоратора. В частности:

@tf.function
def f(path):
    print(path)
    print(type(path))
    for i in path:
        print(i)
        print(type(i))
    for i in iter(path):
        print(i)
        print(type(i))

f(pathFiles)

<_ Фигуры VariantDataset: (), типы: tf.string>

Тензор ("args_1: 0", shape = (), dtype = string)

Тензор ("OptionalGetValue: 0", shape = (), dtype = string)

...