Tôi hiện đang cố gắng đào tạo một mô hình trên tệp csv lớn (> 70GB với hơn 60 triệu hàng). Để làm như vậy tôi đang sử dụng tf.contrib.learn.read_batch_examples. Tôi đang vật lộn để hiểu làm thế nào chức năng này thực sự đọc dữ liệu. Nếu tôi đang sử dụng kích thước lô ví dụ 50.000, thì nó có đọc 50.000 dòng đầu tiên của tệp không? Nếu tôi muốn lặp lại toàn bộ tập tin (1 epoch), tôi có phải sử dụng num_rows / batch_size = 1.200 số bước cho phương thức ước tính.fit không?
Đây là chức năng đầu vào tôi đang sử dụng:
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
Đây là mã tôi đang sử dụng để đào tạo mô hình:
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)
Điều gì sẽ xảy ra nếu tôi gọi lại hàm fit với cùng input_fn. Nó có bắt đầu ở đầu tập tin một lần nữa không, hay nó sẽ nhớ dòng nơi nó đã dừng lần trước?