Я пытаюсь как можно больше использовать 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)