Tensorflow'daki toplu işlerde tren


11

Şu anda büyük bir csv dosyasında (60 milyondan fazla satır ile> 70GB) bir model eğitmeye çalışıyorum. Bunu yapmak için tf.contrib.learn.read_batch_examples kullanıyorum. Bu işlevin verileri nasıl okuduğunu anlamakta zorlanıyorum. Örneğin, 50.000'lik bir toplu iş boyutu kullanıyorsam, dosyanın ilk 50.000 satırını okuyor mu? Tüm dosya (1 dönem) üzerinde döngü istiyorum eğer tahminci.fit yöntemi için num_rows / batch_size = 1.200 adım sayısını kullanmak zorunda mıyım?

Şu anda kullanılan im işlevini İşte:

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

İşte modeli eğitmek için kullanılan kod:

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)

Fit işlevini aynı input_fn ile tekrar çağırırsam ne olur? Dosyanın başlangıcından tekrar başlıyor mu yoksa son durduğu satırı hatırlayacak mı?


Bulduğum medium.com/@ilblackdragon/... input_fn tensorflow içinde harmanlanmasından üzerinde yararlı
fistynuts

Bunu zaten kontrol ettin mi? stackoverflow.com/questions/37091899/…
Frankstr

Yanıtlar:


1

Henüz cevap olmadığı için en azından bir şekilde faydalı bir cevap vermeye çalışıyorum. Sabitlerin tanımlarının dahil edilmesi, sağlanan kodu anlamamıza yardımcı olacaktır.

Genel olarak, bir grup, bir kayıt veya öğenin n katını kullanır. Bir öğeyi nasıl tanımladığınız sorununuza bağlıdır. Tensorflow'da parti, bir tensörün birinci boyutunda kodlanır. Csv dosyası ile ilgili durumda satır satır ( reader=tf.TextLineReader) olabilir. Sütunla öğrenebilirdi ama bunun kodunuzda olduğunu sanmıyorum. Tüm veri kümenizle (= bir dönem ) tren kullanmak istiyorsanız bunu kullanarak yapabilirsiniz numBatches=numItems/batchSize.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.