Berlatih secara berkelompok di Tensorflow

11

Saat ini saya mencoba untuk melatih model pada file csv besar (> 70GB dengan lebih dari 60 juta baris). Untuk melakukannya saya menggunakan tf.contrib.learn.read_batch_examples. Saya berjuang dalam memahami bagaimana fungsi ini benar-benar membaca data. Jika saya menggunakan ukuran batch misalnya 50.000, apakah ia membaca 50.000 baris pertama file? Jika saya ingin mengulang seluruh file (1 zaman) apakah saya harus menggunakan num_rows / batch_size = 1.200 jumlah langkah untuk metode estimator.fit?

Berikut adalah fungsi input yang saya gunakan saat ini:

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

Berikut adalah kode yang saya gunakan untuk melatih model:

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)

Apa yang akan terjadi jika saya memanggil fungsi fit lagi dengan input_fn yang sama. Apakah itu dimulai pada awal file lagi, atau akankah ia mengingat baris di mana ia berhenti terakhir kali?

Nico
sumber
Saya menemukan media.com/@ilblackdragon/... membantu dalam batching dalam tensorflow input_fn
fistynuts
Apakah kamu sudah memeriksa yang itu? stackoverflow.com/questions/37091899/...
Frankstr

Jawaban:

1

Karena belum ada jawaban, saya ingin mencoba memberikan setidaknya jawaban yang bermanfaat. Termasuk definisi konstanta akan membantu sedikit untuk memahami kode yang disediakan.

Secara umum, batch menggunakan n kali catatan atau item. Bagaimana Anda mendefinisikan suatu item tergantung pada masalah Anda. Dalam tensorflow, bets dikodekan dalam dimensi pertama dari tensor. Dalam kasus Anda dengan file csv, mungkin baris per baris ( reader=tf.TextLineReader). Bisa belajar dengan kolom tetapi saya tidak berpikir bahwa ini terjadi dalam kode Anda. Jika Anda ingin berlatih dengan seluruh dataset Anda (= satu zaman ), Anda dapat melakukannya dengan menggunakan numBatches=numItems/batchSize.

Benedikt S. Vogler
sumber