Я пытаюсь использовать API набора данных tenorflow для загрузки tif-изображений, которые могут находиться в сетевом хранилище.Map_func, который я передаю функции tenorflow.Dataset.interleave, передает не ожидаемое имя строки, а тензор со строкой dtype.
Я пытался вычислить этот тензор, используя sess.run и tenor.eval () (также передавая в текущем сеансе в качестве параметра сеанса), но тензор потока вызывает ValueError: «Аргумент ValueError: Fetch нельзя интерпретировать какТензор. (Тензорный Тензор ("arg0: 0", shape = (), dtype = string) не является элементом этого графа.) или ("arg0: 0", shape = (), dtype = string) не являетсяэлемент этого графа.) ".
Пример моего конвейера данных тензорного потока
class DataLoader:
...
def setup(self):
...
tf.data.Dataset.from_tensor_slices(
(
self.training_filenames, # a python list of strings
self.training_label_filenames # a python list of strings
)
)
.apply(tf.data.experimental.filter_for_shard(
self.shard_count,
self.shard_index))
.repeat()
.shuffle(buffer_size=self.training_data_shuffle_buffer_size)
.interleave(
lambda data_filepath, label_filepath: (
self.preprocess_training_data(data_filepath, label_filepath)
),
cycle_length=tf.data.experimental.AUTOTUNE,
num_parallel_calls=tf.data.experimental.AUTOTUNE
)
.batch(self.training_data_batch_size)
.prefetch(self.training_data_batch_size)
...
def preprocess_training_data(self, data_filepath, label_filepath):
data = tifffile.imread(self.session.run(data_filepath).decode())
data_resize = (self.training_data_shape[0], self.training_data_shape[1])
data_transpose = (1, 0, 2)
data_scale = 255.0
data_dtype = self.training_data_type.as_numpy_dtype()
data = numpy.transpose(
cv2.resize(data, data_resize), data_transpose
).astype(data_dtype) / data_scale
label = tifffile.imread(self.session.run(label_filepath))
label = numpy.transpose(
numpy.expand_dims(
cv2.resize(
label,
data_resize),
2
),
data_transpose
)
weights = [
self.vec_class_weights(current_label)
.astype(self.label_data_type.as_numpy_dtype())
for current_label
in label
]
return data, label, weights
Я ожидаю, что моей функции preprocess_training_data будут переданы строки, или я смогу вычислить тензормоя функция передана из преобразования чередования наборов данных, которое будет преобразовано в строку.