টিএফআরেকর্ড ফাইলগুলিকে শার্ডে বিভক্ত করা আপনাকে মেমরির সাথে খাপ খায় না এমন বড় ডেটাসেটগুলিকে সাফ করতে সহায়তা করে।
কল্পনা করুন যে আপনার লক্ষ লক্ষ প্রশিক্ষণ উদাহরণ ডিস্কে সংরক্ষিত আছে এবং আপনি বারবার প্রশিক্ষণ প্রক্রিয়াটির মাধ্যমে সেগুলি চালনা করতে চান। তদ্ব্যতীত, ধরুন যে প্রশিক্ষণের ডেটাগুলির প্রতিটি পুনরাবৃত্তির জন্য (অর্থাত্ প্রতিটি যুগ) আপনি সম্পূর্ণ র্যান্ডম ক্রমে ডেটা লোড করতে চান।
একটি পদ্ধতির প্রতি প্রশিক্ষণের জন্য একটি ফাইল থাকা এবং সমস্ত ফাইলের নামের তালিকা তৈরি করা। তারপরে প্রতিটি যুগের শুরুতে আপনি ফাইলের নামের তালিকাটি বদলে ফেলুন এবং স্বতন্ত্র ফাইলগুলি লোড করুন। এই পদ্ধতির সমস্যাটি হ'ল আপনি নিজের ডিস্কে এলোমেলো অবস্থান থেকে কয়েক মিলিয়ন ফাইল লোড করছেন। এটি বিশেষত একটি হার্ড ডিস্ক ড্রাইভে ধীর হতে পারে। এমনকি যদি আপনি এলোমেলো অবস্থান থেকে কয়েক মিলিয়ন ছোট ফাইল লোড করে থাকেন তবে একটি RAID 0 অ্যারেও গতিতে সহায়তা করবে না। আপনি যদি কোনও নেটওয়ার্ক সংযোগের মাধ্যমে ফাইলগুলিতে অ্যাক্সেস করে থাকেন তবে সমস্যাটি আরও খারাপ হয়।
আরেকটি পদ্ধতি হ'ল একটি বৃহত টিএফআরকর্ড ফাইল থেকে ক্রমানুসারে প্রশিক্ষণের উদাহরণগুলি পড়া এবং একটি শাফল বাফার ব্যবহার করে মেমরির উদাহরণগুলি পরিবর্তন করা। যাইহোক, শাফল বাফার সাধারণত আপনার সিপিইউতে উপলব্ধ ডিডিআর মেমরির চেয়ে বড় হতে পারে না। এবং যদি আপনার ডেটাসেটের তুলনায় শিফেল বাফারটি উল্লেখযোগ্যভাবে ছোট হয় তবে এটি পর্যাপ্তভাবে ডেটা বদল করতে পারে না। ডেটা "স্থানীয়ভাবে" পরিবর্তিত হতে পারে তবে "বিশ্বব্যাপী" পরিবর্তিত হতে পারে না। এটি হ'ল ডেটাসেটের শুরু থেকে উদাহরণগুলি ডেটাসেটের শেষে থেকে উদাহরণগুলি দিয়ে বদলে যাবে না।
একটি ভাল সমাধান হ'ল উপরের দুটি পদ্ধতির একটি ভারসাম্য সংমিশ্রণ আপনার ডেটাসেটকে একাধিক টিএফআরকর্ড ফাইলগুলিতে বিভক্ত করে (শারড বলা হয়) ব্যবহার করা। প্রতিটি যুগের সময় আপনি বিশ্বব্যাপী শিফলিং পেতে শার্ড ফাইলের নামগুলি পরিবর্তন করতে পারেন এবং স্থানীয় শাফলিং পেতে শফল বাফার ব্যবহার করতে পারেন। একটি ভাল ভারসাম্য ডিস্ক গতির সমস্যাগুলি প্রতিরোধের জন্য শারডগুলিকে যথেষ্ট বড় করে তুলবে তবে একটি শফল বাফারের মাধ্যমে পর্যাপ্তভাবে ঝাঁকুনির অনুমতি দেওয়ার জন্য শারডগুলি যথেষ্ট ছোট রাখবে।
সঠিক পদক্ষেপ এখানে:
- এলোমেলোভাবে সমস্ত প্রশিক্ষণের উদাহরণ একাধিক টিএফআরকর্ড ফাইলগুলিতে (শার্ডস) রাখুন।
- প্রতিটি যুগের শুরুতে, ধারালো ফাইলের নামের তালিকাটি পরিবর্তন করুন।
- শার্ডগুলি থেকে প্রশিক্ষণের উদাহরণগুলি পড়ুন এবং শিফেল বাফারের মাধ্যমে উদাহরণগুলি পাস করুন। সাধারণত, শার্ফগুলি জুড়ে ভাল পরিবর্তন হওয়া নিশ্চিত করার জন্য শেফল বাফারটি শার্ড আকারের চেয়ে বড় হওয়া উচিত।
- বদলানো উদাহরণগুলি আপনার প্রশিক্ষণ প্রক্রিয়ায় পাস করুন।
.shuffle()
আপনার যদি একটি বড় tfrecord ফাইল থাকে তবে পদ্ধতিটি আদর্শ সমাধান নয়। আপনি যদি কোনও বড় বাফার আকার না ব্যবহার করেন তবে বদলে যাওয়া আউটপুটটি কিছুটা মূল অর্ডারের সাথে সম্পর্কিত। আমার মনে হয় আপনার যখন একটি বড় ডেটাসেট থাকে তখন tfrecord এ সংরক্ষণ বা শার্দের মধ্যে বিভক্ত হওয়ার আগে ডেটা প্রি-শিফাল করা প্রয়োজন।