Как уменьшить гигантский размер TFRecord, вызванный повторяющимися клавишами
Поскольку размер входного файла json составляет несколько ГБ, и его анализ занимает много времени, я решил попробовать превратить его в более эффективные (или я так думал) файлы TFRecord. Короче говоря, этим я увеличил свой набор данных в 10 раз...
Когда я внимательно посмотрел на некоторые из моих сгенерированных файлов tfrecord, я увидел, что для каждого примера protobuf были включены все ключи для каждой отдельной функции ввода. Поскольку у меня 130 (довольно многословных) ключей и несколько миллионов примеров, большая часть дискового пространства теперь используется этими повторяющимися ключами. Ясно, что должен быть лучший способ, чем повторять ключи для каждого примера. Вот мой код
for i in zip(inputs, labels):
features = dict()
for j in zip(self.getKeys(), i[0]):
features[j[0]] = tf.train.Feature(bytes_list=tf.train.BytesList(value=[j[1].encode()]))
features['label'] = tf.train.Feature(int64_list=tf.train.Int64List(value=i[1]))
# Create an example protocol buffer
example = tf.train.Example(features=tf.train.Features(feature=features))
# Writing the serialized example.
writer.write(example.SerializeToString())
Я нашел документацию относительно TFRecords очень нехваткой, поэтому я спрашиваю здесь: Как я могу эффективно сохранить мои данные, используя TFRecords? Можно ли сохранить по функции, а не по примеру? Таким образом, мне нужно будет включать имя ключа только один раз для каждой функции.