У меня есть большой набор данных, который я хотел бы использовать для обучения в Tensorflow.
Данные хранятся в сжатом цифровом формате (с использованием numpy.savez_compressed
).Количество файлов в файле зависит от способа их создания.
В настоящее время я использую объект-генератор на основе последовательностей Keras для обучения, но я бы хотел полностью перейти на Tensorflow без Keras.
Я смотрю на Dataset API на веб-сайте TF, но не совсем очевидно, как я могу использовать это для чтения данных с ошибками.
Моей первой идеей было это
import glob
import tensorflow as tf
import numpy as np
def get_data_from_filename(filename):
npdata = np.load(open(filename))
return npdata['features'],npdata['labels']
# get files
filelist = glob.glob('*.npz')
# create dataset of filenames
ds = tf.data.Dataset.from_tensor_slices(filelist)
ds.flat_map(get_data_from_filename)
Однако, это передает заполнитель TF Тензор в настоящую функцию numpy, и numpy ожидает стандартную строку.Это приводит к ошибке:
File "test.py", line 6, in get_data_from_filename
npdata = np.load(open(filename))
TypeError: coercing to Unicode: need string or buffer, Tensor found
Другой вариант, который я рассматриваю (но кажется грязным), состоит в создании объекта набора данных, построенного на заполнителях TF, который я затем заполняю во время цикла epoch-batch из моего numpy.файлы.
Есть предложения?