Как уменьшить гигантский размер 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? Можно ли сохранить по функции, а не по примеру? Таким образом, мне нужно будет включать имя ключа только один раз для каждой функции.

0 ответов

Другие вопросы по тегам