টেনসরফ্লোতে ব্যাচগুলিতে ট্রেন


11

আমি বর্তমানে একটি বড় সিএসভি ফাইলে (> GB০ গিগাবাইটেরও বেশি সারি সহ 70০ জিবি) একটি মডেলকে প্রশিক্ষণের চেষ্টা করছি। এটি করার জন্য আমি tf.contrib.learn.read_batch_example ব্যবহার করছি। আমি এই ফাংশনটি কীভাবে ডেটা পড়ে তা বোঝার জন্য লড়াই করছি। যদি আমি ব্যাচ আকারটি উদাহরণস্বরূপ 50.000 ব্যবহার করছি তবে এটি ফাইলের প্রথম 50.000 লাইন পড়বে? যদি আমি পুরো ফাইলটি লুপ করতে চাই (1 যুগ) আমি কি অনুমানকারী.ফিট পদ্ধতির জন্য num_rows / batch_size = 1.200 সংখ্যক পদক্ষেপ ব্যবহার করতে পারি?

এখানে বর্তমানে ইনপুট ফাংশনটি ব্যবহার করছি:

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)

যদি আমি একই ইনপুট_ফএন দিয়ে আবার ফিট ফিটকে কল করি তবে কী হবে। এটি আবার ফাইলের শুরুতে শুরু হয়, বা এটি শেষ বার যেখানে থামেছে সেই লাইনের কথা মনে রাখবে?


আমি দেখেছি medium.com/@ilblackdragon/... input_fn tensorflow মধ্যে Batching মাধ্যমে সহায়ক
fistynuts

তুমি কি ইতিমধ্যে এটি পরীক্ষা করেছ? stackoverflow.com/questions/37091899/...
Frankstr

উত্তর:


1

এখনও কোনও উত্তর না থাকায় আমি কমপক্ষে কোনওভাবে দরকারী উত্তর দেওয়ার চেষ্টা করতে চাই। ধ্রুবক সংজ্ঞা সহ অন্তর্ভুক্ত প্রদত্ত কোডটি বুঝতে কিছুটা সহায়তা করবে।

সাধারণত একটি ব্যাচ বলতে রেকর্ড বা আইটেমের n বার ব্যবহার করে। আপনি কীভাবে কোনও আইটেম সংজ্ঞায়িত করেন তা নির্ভর করে আপনার সমস্যার উপর। টেনসরফ্লোতে ব্যাচটি টেনসরের প্রথম মাত্রায় এনকোড করা হয়। সিএসভি ফাইলের ক্ষেত্রে আপনার ক্ষেত্রে এটি লাইন বাই লাইন হতে পারে ( reader=tf.TextLineReader)। এটি কলাম দ্বারা শিখতে পারে তবে আমি মনে করি না যে এটি আপনার কোডে ঘটছে। আপনি যদি আপনার পুরো ডেটাসেট (= এক যুগ ) দিয়ে ট্রেন চান তবে আপনি এটি ব্যবহার করে তা করতে পারেন numBatches=numItems/batchSize

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.