Tensorflow में बैचों पर ट्रेन


11

मैं वर्तमान में एक बड़ी csv फ़ाइल (> 60GB से अधिक 60 पंक्तियों वाली 70GB) पर एक मॉडल को प्रशिक्षित करने की कोशिश कर रहा हूं। ऐसा करने के लिए मैं tf.contrib.learn.read_batch_examples का उपयोग कर रहा हूं। मैं यह समझने में संघर्ष कर रहा हूं कि यह फ़ंक्शन वास्तव में डेटा कैसे पढ़ता है। अगर मैं 50.000 के बैच आकार का उपयोग कर रहा हूँ, तो क्या यह फ़ाइल की पहली 50.000 पंक्तियाँ पढ़ता है? अगर मैं पूरी फ़ाइल (1 युग) पर लूप करना चाहता हूं, तो मुझे अनुमानक.फिट विधि के लिए num_rows / batch_size = 1.200 संख्याओं का उपयोग करना होगा?

यहाँ वर्तमान में प्रयोग किया जा रहा इनपुट फंक्शन im है:

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 के साथ फिर से फिट फ़ंक्शन को कॉल करूंगा तो क्या होगा। क्या यह फ़ाइल की शुरुआत में फिर से शुरू होता है, या यह उस पंक्ति को याद रखेगा जहां यह पिछली बार बंद हो गया है?


मैंने पाया medium.com/@ilblackdragon/... input_fn tensorflow भीतर batching पर उपयोगी
fistynuts

क्या आपने पहले ही जाँच कर ली थी? stackoverflow.com/questions/37091899/…
21

जवाबों:


1

जैसा कि अभी तक कोई जवाब नहीं है, मैं कम से कम किसी भी तरह से उपयोगी जवाब देने की कोशिश करना चाहता हूं। स्थिरांक परिभाषाओं को शामिल करने से प्रदान किए गए कोड को समझने में थोड़ी मदद मिलेगी।

आम तौर पर एक बैच बोलते हुए n एक रिकॉर्ड या आइटम का उपयोग करता है। आप किसी आइटम को कैसे परिभाषित करते हैं यह आपकी समस्या पर निर्भर करता है। टेंसोफ़्लो में बैच एक टेंसर के पहले आयाम में एन्कोडेड है। सीएसवी फ़ाइल के साथ आपके मामले में यह लाइन द्वारा लाइन ( reader=tf.TextLineReader) हो सकता है । यह कॉलम से सीख सकता है लेकिन मुझे नहीं लगता कि यह आपके कोड में हो रहा है। यदि आप अपने संपूर्ण डेटासेट (= एक युग ) के साथ ट्रेन चाहते हैं तो आप इसका उपयोग कर सकते हैं numBatches=numItems/batchSize

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.