টেনসরফ্লোতে পদক্ষেপ এবং যুগের মধ্যে পার্থক্য কী?


125

বেশিরভাগ মডেলগুলিতে, একটি পদক্ষেপের প্যারামিটার থাকে যা ডেটা চালিয়ে যাওয়ার ধাপগুলির সংখ্যা নির্দেশ করে । কিন্তু এখনো আমি সবচেয়ে ব্যবহারিক ব্যবহার দেখতে, আমরা হইয়া ফাংশন এন চালানো সময়কাল

1 যুগের সাথে 1000 পদক্ষেপ এবং 10 যুগের সাথে 100 টি ধাপ চালানোর মধ্যে পার্থক্য কী? অনুশীলনে কোনটি ভাল? ধারাবাহিক যুগের মধ্যে কোন যুক্তি পরিবর্তন? ডেটা বদল?


1
মেশিনলিয়ারিংমাস্ট্রি ডট কম এ জেসন ব্রাউনলির ঠিক সেই প্রশ্নের সঠিক উত্তর দেওয়া আছে।
BmyGuest

উত্তর:


84

একটি যুগের অর্থ সাধারণত প্রশিক্ষণের সমস্ত ডেটার উপরে একটি পুনরাবৃত্তি হয়। উদাহরণস্বরূপ আপনার যদি 20,000 চিত্র এবং 100 ব্যাচের আকার থাকে তবে যুগের মধ্যে 20,000 / 100 = 200 পদক্ষেপ থাকতে হবে। তবে আমি সাধারণত আমার কাছে অনেক বড় ডেটা সেট থাকা সত্ত্বেও সাধারণত প্রতি যুগের জন্য 1000 এর মতো নির্দিষ্ট সংখ্যক পদক্ষেপগুলি সেট করি। যুগের শেষে আমি গড় ব্যয় পরীক্ষা করে দেখি এবং যদি এটির উন্নতি হয় তবে আমি একটি চেকপয়েন্ট সংরক্ষণ করি। এক যুগ থেকে অন্য যুগের ধাপগুলির মধ্যে কোনও পার্থক্য নেই। আমি কেবল তাদের চেকপয়েন্ট হিসাবে বিবেচনা করি।

লোকেরা প্রায়শই যুগের মধ্যে ডেটা সেট ডেটা চারপাশে পরিবর্তন করে। আমি আমার যুগগুলিতে প্রক্রিয়া করার জন্য ডেটা বেছে নিতে র্যান্ডম.সাম্পল ফাংশনটি ব্যবহার করতে পছন্দ করি। সুতরাং বলুন যে আমি 32 টি ব্যাচের আকারের সাথে 1000 টি পদক্ষেপ করতে চাই training প্রশিক্ষণ ডেটার পুল থেকে আমি এলোমেলোভাবে 32,000 নমুনা বেছে নেব।


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

84

একটি প্রশিক্ষণের ধাপ হল একটি গ্রেডিয়েন্ট আপডেট। এক ধাপে ব্যাচ_ আকারে অনেকগুলি উদাহরণ প্রক্রিয়া করা হয়।

একটি যুগের প্রশিক্ষণ ডেটা মাধ্যমে একটি পূর্ণ চক্র গঠিত। এটি সাধারণত অনেক ধাপ। উদাহরণস্বরূপ, যদি আপনার কাছে 2,000 টি চিত্র থাকে এবং 10 টি ব্যাচের আকার ব্যবহার করে একটি যুগের মধ্যে 2,000 চিত্র / (10 চিত্র / পদক্ষেপ) = 200 পদক্ষেপ থাকে।

আপনি যদি প্রতিটি পদক্ষেপে এলোমেলোভাবে (এবং স্বতন্ত্র) আমাদের প্রশিক্ষণ চিত্রটি চয়ন করেন, তবে আপনি সাধারণত এটিকে মহাকাশ বলবেন না। [এই যেখানে আমার উত্তরটি আগের উত্তর থেকে পৃথক হয়েছে। এছাড়াও আমার মন্তব্য দেখুন।]


আমি 200 টি পদক্ষেপের গণনায় একটি সম্পাদনা করেছি তবে লগইন করতে ভুলে গিয়েছি, তাই যদি আপনি "অজানা ব্যবহারকারী" এর সাথে কথা বলতে চান ... আমি এখানে আছি
ক্রিস চিয়াসন

16

যেহেতু আমি বর্তমানে টিএফ.এসটিমেটর এপিআই নিয়ে পরীক্ষা নিরীক্ষা করছি আমিও এখানে আমার শিশির অনুসন্ধানগুলি যুক্ত করতে চাই। টেনসরফ্লো জুড়ে পদক্ষেপ এবং ইওকস পরামিতিগুলির ব্যবহার সামঞ্জস্যপূর্ণ কিনা তা আমি এখনও জানি না এবং অতএব আমি কেবল tf.estimator (বিশেষত tf.estimator.LinearRegressor) এর সাথে সম্পর্কিত।

প্রশিক্ষণ পদক্ষেপগুলি দ্বারা সংজ্ঞায়িত num_epochs: stepsস্পষ্টভাবে সংজ্ঞায়িত নয়

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)

মন্তব্য: আমি num_epochs=1প্রশিক্ষণের ইনপুট এবং ডক এন্ট্রিের জন্য সেট করেছি numpy_input_fnআমাকে "num_epochs: পূর্ণসংখ্যা, ডেটা ওপরে পুনরাবৃত্তি করার জন্য যুগের সংখ্যা None। সঙ্গে num_epochs=1উপরোক্ত উদাহরণে প্রশিক্ষণ ঠিক চালায় x_train.size / batch_size (বার / পদক্ষেপ আমার ক্ষেত্রে এই 175000 পদক্ষেপ ছিল x_train700000 এর একটি আকার ছিল এবংbatch_size 4 ছিল)।

প্রশিক্ষণ প্রাপ্ত পদক্ষেপগুলি দ্বারা সংজ্ঞায়িত num_epochs: stepsস্পষ্টভাবে সংজ্ঞাযুক্ত পদক্ষেপের সংখ্যার চেয়ে উচ্চতর সংজ্ঞায়িতnum_epochs=1

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)

মন্তব্য: num_epochs=1আমার ক্ষেত্রে 175000 পদক্ষেপের অর্থ হবে ( x_train.size / batch_size সহ x_train.size = 700,000 এবং ব্যাচ_সাইজ = 4 ) এবং এটি হ'ল estimator.trainধাপগুলির পরামিতি 200,000 তে নির্ধারিত হলেও পদক্ষেপের সংখ্যা estimator.train(input_fn=train_input, steps=200000)

প্রশিক্ষণ পদক্ষেপ দ্বারা সংজ্ঞায়িত steps

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)

মন্তব্য: যদিও আমি সেট করেছি num_epochs=1যখন কল করার সময় numpy_input_fn1000 টি পদক্ষেপের পরে প্রশিক্ষণ বন্ধ হবে। এ কারণে যে steps=1000estimator.train(input_fn=train_input, steps=1000)মুছে ফেলা হয় num_epochs=1মধ্যে tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)

উপসংহার : নির্ধারণের num_epochsজন্য tf.estimator.inputs.numpy_input_fnএবং এর stepsজন্য প্যারামিটার যাই হোক না কেন estimator.train, নিম্ন সীমাটি কতগুলি পদক্ষেপের মধ্য দিয়ে চলবে তা নির্ধারণ করে।


11

সহজ কথায়
Epoch: পুরো ডেটাসেটের
ধাপগুলি থেকে এককটিকে পাসের সংখ্যা হিসাবে বিবেচনা করা হয় : টেনসরফ্লোতে একটি পদক্ষেপকে ব্যাচের আকার দ্বারা বিভক্ত উদাহরণগুলির দ্বারা বহুগুণে যুগের সংখ্যা হিসাবে বিবেচনা করা হয়

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100

উমর, আপনার সূত্রটি ব্যবহার করে আমি আরও ভাল ফলাফল পাচ্ছি তবে কেবল ভাবছি কেন প্রত্যেকের আলাদা আলাদা সূত্র আছে? উপরের প্রত্যেকের মতোই বলেছেন, পদক্ষেপ = (চিত্রের মোট সংখ্যা) / ব্যাচের আকার।
সত্যেন্দ্র সাহানী

@ সত্যেন্দ্রসাহানী কোর্সে প্রদত্ত জিসিপি কোর্সের একজন প্রশিক্ষকের কাছ থেকে আমি এই সূত্রটি পেয়েছি, এটিই হতে পারে যে আপনি আরও ভাল ফলাফল পেয়েছিলেন।
মুহাম্মদ উমর আমানাত

@ উমার, তবে কিছু সময় নমুনার সংখ্যা বিশাল। আমাদের ক্ষেত্রে যেমন আমাদের 99,000 নমুনা রয়েছে। যদি আমরা একটি ব্যাচের আকার 8 এবং epochs 20 নির্বাচন করি তবে মোট পদক্ষেপের আকার (20 * 99000) / 8 = 247,500। যা সত্যিই একটি উচ্চ সংখ্যা। সেখানে আমি এই পদ্ধতিতে সন্দেহ শুরু করি।
সত্যেন্দ্র সাহানি

8

যুগ: একটি প্রশিক্ষণ পর্ব গ্রেডিয়েন্ট গণনা এবং অপ্টিমাইজেশনের জন্য সমস্ত প্রশিক্ষণ ডেটার সম্পূর্ণ ব্যবহারের প্রতিনিধিত্ব করে (মডেলটিকে প্রশিক্ষণ দেয়)।

পদক্ষেপ: একটি প্রশিক্ষণের পদক্ষেপের অর্থ মডেলকে প্রশিক্ষণের জন্য এক ব্যাচের আকারের প্রশিক্ষণের ডেটা ব্যবহার করা।

যুগে যুগে প্রশিক্ষণের পদক্ষেপের সংখ্যা: total_number_of_training_examples/batch_size

প্রশিক্ষণের পদক্ষেপের মোট সংখ্যা: number_of_epochsএক্স Number of training steps per epoch


2

যেহেতু এখনও কোনও গ্রহণযোগ্য উত্তর নেই: ডিফল্টরূপে আপনার সমস্ত প্রশিক্ষণ ডেটার উপরে একটি যুগ চলবে। এক্ষেত্রে আপনার n পদক্ষেপ রয়েছে, যার সাথে এন = প্রশিক্ষণ_ চ্যালেঞ্জ / ব্যাচ_সাইজ রয়েছে।

আপনার প্রশিক্ষণের ডেটা যদি খুব বেশি হয় তবে আপনি কোনও এক যুগের সময় পদক্ষেপের সংখ্যা সীমাবদ্ধ করার সিদ্ধান্ত নিতে পারেন [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]

যখন পদক্ষেপের সংখ্যাটি আপনি নির্ধারিত সীমাতে পৌঁছেছেন তখন পরবর্তী সময় শুরু হবে over টিএফ-এ কাজ করার সময়, আপনার ডেটা সাধারণত ব্যাচের তালিকায় প্রথমে রূপান্তরিত হয় যা প্রশিক্ষণের জন্য মডেলকে খাওয়ানো হবে। প্রতিটি পদক্ষেপে আপনি একটি ব্যাচ প্রক্রিয়া করেন।

1 যুগের জন্য 1000 টি পদক্ষেপ বা 10 যুগের সাথে 100 টি ধাপ নির্ধারণ করা আরও ভাল কিনা তা আমি জানি না এর কোনও সরল উত্তর আছে কিনা। টেনসরফ্লো টাইমসরিজ ডেটা টিউটোরিয়াল ব্যবহার করে উভয় পদ্ধতির সাথে সিএনএন প্রশিক্ষণের ফলাফল এখানে রয়েছে:

এই ক্ষেত্রে, উভয় পন্থা খুব অনুরূপ পূর্বাভাসের দিকে নিয়ে যায়, কেবল প্রশিক্ষণের প্রোফাইলগুলি পৃথক।

পদক্ষেপ = 20 / epochs = 100 এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপগুলি = 200 / epochs = 10

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

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