টুইটারে
আমি এই ক্রিয়াকলাপটি দিয়ে যাচ্ছি যে আমি নিজের প্রয়োজনীয় স্মৃতিটি গণনা করতে পারি কিনা তা দেখতে:
ক্রিয়াকলাপ : 532,752 * 2 * 4 / (1024 ^ 2) = 4.06 এমবি
পরামিতি: 19,072,984 * 4 / (1024 ^ 2) * 3 = 218.27 এমবি
বিবিধ: 128 * 9,000 * 4 / (1024 ^ 2) = 4.39 এমবি
মোট স্মৃতি: (4.06 * 128 ) + 218.27 + 4.39 = 742.34 এমবি
( কেউ যদি দয়া করে আমার ভুল হয় তবে আমাকে এটিকে সংশোধন করুন। এফওয়াইআই, আপনি ইতিমধ্যে 128 দ্বারা বিবিধ গুণ করেছেন, সুতরাং সে কারণেই আমি উপরের 128 দ্বারা এটি গুণ করি নি )
আমি আপনাকে এই নিবন্ধ এবং সংশ্লিষ্ট ভিডিওতে নির্দেশ করব । তারা আমাকে আরও অনেক ভাল যা চলছে তা বুঝতে সাহায্য করেছিল।
দ্রষ্টব্য: ভবিষ্যদ্বাণীগুলির জন্য একটি নেটওয়ার্ক ব্যবহার করার জন্য প্রয়োজনীয় মেমরিটি দুটি কারণে প্রশিক্ষণের জন্য প্রয়োজনীয় চেয়ে অনেক কম:
- ভবিষ্যদ্বাণী করার সময়, আমরা কেবল নেটওয়ার্কের মাধ্যমে একটি চিত্র প্রেরণ করি এবং পিছনে নয় (সুতরাং আমরা মেমরি এক্স 3 গুণ করি না; নীচে দেখুন)
- প্রতি চিত্রের জন্য একটি পূর্বাভাস রয়েছে (সুতরাং আমাদের কোনও ব্যাচের আকারের দ্বারা একটি চিত্রের জন্য প্রয়োজনীয় মেমরিটি গুণানোর প্রয়োজন নেই কারণ আমরা পূর্বাভাসে ব্যাচগুলি ব্যবহার করি না)।
প্রক্রিয়া (ট্রেন থেকে স্মৃতি)
- একটি ছবিতে প্রশিক্ষণের জন্য প্রয়োজনীয় মেমরি গণনা করুন
- আপনার ব্যাচের চিত্র সংখ্যা দ্বারা এই সংখ্যাটি গুণ করুন
( স্মরণ রাখুন: মিনি-ব্যাচিং) বলছে যে আমরা আমাদের উপাত্তের একটি উপসেট নিয়েছি, সাবসেটের প্রতিটি চিত্রের গ্রেডিয়েন্ট এবং ত্রুটিগুলি গণনা করি, তারপরে এগুলি গড় করে গড়ের দিকে এগিয়ে যাই conv অ্যাক্টিভেশন সংখ্যা ব্যাচের চিত্র সংখ্যা দ্বারা বিভক্ত হয়। )।
পদক্ষেপ 1: 1 চিত্রের জন্য মেমরি
একটি চিত্র প্রশিক্ষণের জন্য, আপনাকে অবশ্যই এর জন্য মেমরি সংরক্ষণ করতে হবে:
মডেল পরামিতি:
ওজন এবং গোঁড়ামির প্রতিটি স্তর, তাদের এ গ্রেডিয়েন্ট , এবং তাদের ভরবেগ ভেরিয়েবল (আদম, Adagrad, RMSProp ইত্যাদি optimizers ব্যবহার করা হয় যদি থাকে)
এর জন্য মেমোরিটিকে আনুমানিকভাবে নির্ধারণ করতে, ওজন এবং বায়াসগুলি সংরক্ষণ করার জন্য প্রয়োজনীয় মেমরিটি গণনা করুন এবং এটি 3 দ্বারা (অর্থাৎ "3" দ্বারা গুণিত করুন কারণ আমরা বলছি যে ওজন এবং বায়াসগুলি সংরক্ষণ করার জন্য প্রয়োজনীয় মেমরির পরিমাণ (মোটামুটি) সমান) যে গ্রেডিয়েন্ট এবং গতিশীল পরিবর্তনশীল জন্য প্রয়োজন)
সমীকরণ:
Convolutions:
ওজন (এন) = গভীরতা (এন) * (কর্নেল_উইথ * কর্নেল_ উচ্চতা) * গভীরতা (এন -1)
পক্ষপাত (n) = গভীরতা (n)
সম্পূর্ণ সংযুক্ত (ঘন) স্তর:
ওজন (এন) = আউটপুট (এন) * ইনপুট (এন)
বায়াসেস (এন) = আউটপুট (এন)
কোথায় এন বর্তমান স্তর এবং এন -1 পূর্ববর্তী স্তর এবং আউটপুটগুলি এফসি স্তর থেকে আউটপুট সংখ্যা এবং ইনপুটগুলি এফসি স্তরটির ইনপুটগুলির সংখ্যা (যদি পূর্ববর্তী স্তরটি সম্পূর্ণভাবে সংযুক্ত স্তর না থাকে, ইনপুটগুলির সংখ্যা সমানভাবে সেই স্তরটির আকারের সমান)।
দ্রষ্টব্য: একা ওজন এবং বায়াসদের স্মৃতি, প্লাস একটি চিত্রের জন্য অ্যাক্টিভেশনগুলির জন্য মেমরি (নীচে দেখুন), আপনার পূর্বাভাসের জন্য প্রয়োজনীয় মোট মেমরি (কনভোলিউশনের জন্য মেমরির জন্য কিছু ওভারহেড এবং কিছু অন্যান্য বিষয় বাদে)।
- ক্রিয়াকলাপ (এগুলি ক্যাফেতে "ব্লবস"):
(আমি এখানে স্বল্পভাবে পদ ব্যবহার করছি, আমার সাথে সহ্য করুন)
কনভলিউশন লেয়ারের প্রতিটি কনভলিউশন " চিত্রটিতে বহু পিক্সেল " অ্যাক্টিভেশন তৈরি করে (যেমন আপনি একটি একক কনভলিউশনের মাধ্যমে চিত্রটি পাস করেন, আপনি " এম " অ্যাক্টিভেশন সমন্বিত একটি বৈশিষ্ট্য মানচিত্র পাবেন , যেখানে " মি " আপনার পিক্সেলগুলির সংখ্যা ইমেজ / ইনপুট)।
পুরোপুরি সংযুক্ত স্তরগুলির জন্য, আপনার উত্পন্ন অ্যাক্টিভেশনগুলির সংখ্যা আপনার আউটপুট আকারের সমান।
Convolutions:
ক্রিয়াকলাপ (এন) = চিত্র_ প্রস্থ * চিত্র_ উচ্চতা * চিত্র_নাম_চ্যানেলগুলি
সম্পূর্ণ সংযুক্ত (ঘন) স্তর:
ক্রিয়াকলাপ (এন) = আউটপুট (এন)
নোট করুন যে আপনার ইনপুটটি নেটওয়ার্কের শুরুতে কেবলমাত্র একটি চিত্র। কনভোলিউশনের পরে, এটি অন্য কোনও কিছুতে পরিণত হয় (বৈশিষ্ট্যযুক্ত মানচিত্র)। সুতরাং আরও সঠিকভাবে "চিত্র_উইথ", "চিত্র_ উচ্চতা", এবং "চিত্র_নাম_চ্যানেলগুলি" "ইনপুট_উইথ", "ইনপুট_উত্তর", এবং "স্তর_পথ" এর সাথে প্রতিস্থাপন করুন। (চিত্রগুলির ক্ষেত্রে এই ধারণাটি সম্পর্কে চিন্তা করা আমার পক্ষে সহজ।
যেহেতু প্রতিটি স্তরে অ্যাক্টিভেশনগুলির জন্য আমাদের ত্রুটিও সংরক্ষণ করতে হবে (পিছনের পাসে ব্যবহৃত), আমাদের স্টোরেজ স্পেসে স্থান তৈরি করতে আমাদের প্রয়োজনীয় সংস্থাগুলির সংখ্যা পেতে আমরা ক্রিয়াকলাপের সংখ্যা 2 দিয়ে গুণ করি। ব্যাচের চিত্রের সংখ্যা সহ অ্যাক্টিভেশনগুলির সংখ্যা বৃদ্ধি পায়, সুতরাং আপনি এই সংখ্যাটি ব্যাচের আকার দ্বারা গুণিত করুন।
পদক্ষেপ 2: ট্রেনের ব্যাচ মেমরি
ওজন এবং পক্ষপাতের সংখ্যা (3 বার) এবং ক্রিয়াকলাপের সংখ্যার (বারের আকারের 2 গুণ বেশি) যোগ করুন। এটিকে 4 দিয়ে গুণ করুন এবং আপনি ব্যাচকে প্রশিক্ষণের জন্য প্রয়োজনীয় বাইটের সংখ্যা পাবেন। জিবিতে উত্তর পেতে আপনি 1024 ^ 2 দিয়ে ভাগ করতে পারেন।