В настоящее время я пытаюсь обучить модель для большого файла CSV (> 70 ГБ с более чем 60 миллионов строк). Для этого я использую tf.contrib.learn.read_batch_examples. Я изо всех сил пытаюсь понять, как эта функция на самом деле читает данные. Если я использую размер пакета, например, 50 000, считывает ли он первые 50 000 строк файла? Если я хочу перебрать весь файл (1 эпоха), я должен использовать num_rows / batch_size = 1.200 количество шагов для метода estimator.fit?
Вот функция ввода, которую я сейчас использую:
def input_fn(file_names, batch_size):
# Read csv files and create examples dict
examples_dict = read_csv_examples(file_names, batch_size)
# Continuous features
feature_cols = {k: tf.string_to_number(examples_dict[k],
out_type=tf.float32) for k in CONTINUOUS_COLUMNS}
# Categorical features
feature_cols.update({
k: tf.SparseTensor(
indices=[[i, 0] for i in range(examples_dict[k].get_shape()[0])],
values=examples_dict[k],
shape=[int(examples_dict[k].get_shape()[0]), 1])
for k in CATEGORICAL_COLUMNS})
label = tf.string_to_number(examples_dict[LABEL_COLUMN], out_type=tf.int32)
return feature_cols, label
def read_csv_examples(file_names, batch_size):
def parse_fn(record):
record_defaults = [tf.constant([''], dtype=tf.string)] * len(COLUMNS)
return tf.decode_csv(record, record_defaults)
examples_op = tf.contrib.learn.read_batch_examples(
file_names,
batch_size=batch_size,
queue_capacity=batch_size*2.5,
reader=tf.TextLineReader,
parse_fn=parse_fn,
#read_batch_size= batch_size,
#randomize_input=True,
num_threads=8
)
# Important: convert examples to dict for ease of use in `input_fn`
# Map each header to its respective column (COLUMNS order
# matters!
examples_dict_op = {}
for i, header in enumerate(COLUMNS):
examples_dict_op[header] = examples_op[:, i]
return examples_dict_op
Вот код, который я использую для обучения модели:
def train_and_eval():
"""Train and evaluate the model."""
m = build_estimator(model_dir)
m.fit(input_fn=lambda: input_fn(train_file_name, batch_size), steps=steps)
Что произойдет, если я вызову функцию подгонки снова с тем же input_fn. Он начинается снова в начале файла или запоминает строку, где он остановился в прошлый раз?
python
tensorflow
Нико
источник
источник
Ответы:
Поскольку ответа пока нет, я хочу попытаться дать хотя бы какой-то полезный ответ. Включение определений констант поможет немного понять предоставленный код.
Вообще говоря, партия использует n раз запись или элемент. Как вы определяете предмет, зависит от вашей проблемы. В тензорном потоке партия кодируется в первом измерении тензора. В вашем случае с файлом CSV это может быть строка за строкой (
reader=tf.TextLineReader
). Это можно узнать по столбцам, но я не думаю, что это происходит в вашем коде. Если вы хотите тренироваться со всем вашим набором данных (= одна эпоха ), вы можете сделать это с помощьюnumBatches=numItems/batchSize
.источник