У меня очень большой набор данных, который хранится в виде фрагментов по 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?