Тензор потока вычисляет агрегатную функцию для большого количества данных в формате tfrecord - PullRequest
0 голосов
/ 05 ноября 2018

У меня очень большой набор данных, который хранится в виде фрагментов по 5000 в нескольких файлах tfrecord. Вместе все эти записи намного больше моей оперативной памяти. Я хотел бы сделать выборку из N = 0,05 * TOTAL_SIZE случайных индексов в наборе данных и вычислить среднее и стандартное отклонение для нормализации моих данных.

Если бы не размер набора данных, это было бы легко, но у меня не хватает памяти, даже когда я пытаюсь вычислить сумму всех интересующих меня тензоров.

# NOTE: count is computed ahead of time by looping over all the tfrecord entries

with tf.device('/cpu:0'):
    sample_size = int(count * 0.05)
    random_indexes = set(np.random.randint(low=0, high=count, size=sample_size))
    stat_graph = tf.Graph()
    with tf.Session(graph=stat_graph) as sess:
        val_sum = np.zeros(shape=(180, 2050))
        for file in files:
            print("Reading from file: %s" % file)
            for record in tf.python_io.tf_record_iterator(file):
                features = tf.parse_single_example(
                    record,
                    features={
                        "val": tf.FixedLenFeature((180, 2050), tf.float32),
                    })
                if index in random_indexes:
                    val_sum += features["val"].eval(session=sess)
                index += 1
        val_mean = val_sum / sample_size

Как правильно рассчитать некоторую статистическую функцию, то есть среднее значение и / или стандартное отклонение, для набора данных tfrecord?

1 Ответ

0 голосов
/ 05 ноября 2018

Я думаю, что tf.parse_single_example добавляет новый тензор в граф каждый раз, когда он вызывается. Вместо вышесказанного вам следует указать строку с заполнителем:

...
record_placeholder = tf.placeholder(tf.string)
features = tf.parse_single_example(
    record_placeholder,
    features={
        "val": tf.FixedLenFeature((180, 2050), tf.float32),
    })
for record in tf.python_io.tf_record_iterator(file):
...
val_sum += features["val"].eval(feed_dict={record_placeholder: record}, session=sess)

Дайте мне знать, если это работает, так как у меня нет возможности проверить это.

...