به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

با سلام عرض ادب
دوستان کسی تا حالا با sharding data کار کرده ؟ این برای دیتاهای بزرگ بکار میرود یعنی میان دیتا رو تیکه تیکه میکنند
چندتا سوال داشتم ممنون میشم راهنماییم کنید
-# وقتی دیتایی بزرگ مثله امیج نت یا هر دیتای بزرگ دیگه ایی در دسترس داریم و برای ترین یک شبکه استفاده میکنیم فرضا این دیتا به tfrecord یا lmdb هم تبدیل شده است. وقتی این دیتا رو یک shard در در نظر بگیریم موقع فراخوانی این دیتابیس همه شون در رم سیستم قرار میگیرند یا اینکه فقط به میزان بچ سایز در رم سیستم قرار میگیرد ؟ اگر اره ، چجوری ؟ پس بقیه اون دیتابیس کجا لود میشوند ؟ مگه اینطوری نیست که کل اون تک shard در رم سیستم قرار میگیرد و cpu به میزان اون بچ سایز از اون دیتاست fetch میکند و به GPU برای ترین شبکه میدهد ؟

همانطور که میدانید یکی از کارهای بدی که موقع ترین صورت میگیرد در صف انتظار موندن GPU برای اینکه CPU بهش داده رو اماده کنه این باعث میشه سرعت تریننیگ شبکه رو کند کنه برای رفع این مشکل بحث multi-processing هست بنظرتون شما این FLAG ها میتونه کارساز باشه و اینکه چجوری میشه تنظیمشون کرد برای کارهای خودمون

tf.app.flags.DEFINE_integer('batch_size', 32,
                            """Number of images to process in a batch.""")
tf.app.flags.DEFINE_integer('image_size', 299,
                            """Provide square images of this size.""")
tf.app.flags.DEFINE_integer('num_preprocess_threads', 4,
                            """Number of preprocessing threads per tower. """
                            """Please make this a multiple of 4.""")
tf.app.flags.DEFINE_integer('num_readers', 4,
                            """Number of parallel readers during train.""")

# Images are preprocessed asynchronously using multiple threads specified by
# --num_preprocss_threads and the resulting processed images are stored in a
# random shuffling queue. The shuffling queue dequeues --batch_size images
# for processing on a given Inception tower. A larger shuffling queue guarantees
# better mixing across examples within a batch and results in slightly higher
# predictive performance in a trained model. Empirically,
# --input_queue_memory_factor=16 works well. A value of 16 implies a queue size
# of 1024*16 images. Assuming RGB 299x299 images, this implies a queue size of
# 16GB. If the machine is memory limited, then decrease this factor to
# decrease the CPU memory footprint, accordingly.
tf.app.flags.DEFINE_integer('input_queue_memory_factor', 16,
                            """Size of the queue of preprocessed images. """
                            """Default is ideal but try smaller values, e.g. """
                            """4, 2 or 1, if host memory is constrained. See """
                            """comments in code for more details.""")
توسط (389 امتیاز)
ویرایش شده توسط

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام
وقتی دیتاست بزرگ هستش نمیشه همه رو وارد رم gpu‌ و یا حتی رم cpu کرد. برای حل این مسله یه صف تعریف میشه. و دیتا از روی هارد (بهتره SSD باشه) خونده میشه و وارد رم کامپیوتر میشه و باصطلاح وارد صف میشه بعد به اندازه بچ وارد رم gpu‌ میشه.
برای دیتاست های تصویر تو تنسورفلو از tf.contrib.data.Dataset دیتاست درست میشه. بنده هم دارم به همین روش یه کد مینویسم و امروز یا فردا تو گیت خودم میزارم. ولی اگه دیتاستتون به صورت فایل باشه مثلا یه mat‌ فایل با حجم بالا ابتدا بایستی به tfrecord‌ تبدیل بشه و بعد یه صف تعریف بشه و از فایل tfrecord‌ که روی هارد هستش خونده بشه و به رم کامپیوتر منتقل بشه (وارد صف بشه) و از رم کامپیوتر به رم GPU وارد بشه. یه نمونه از کد شو بنده تو گیت هابم گذاشتم.

توسط (830 امتیاز)
انتخاب شده توسط
دیتاستم تصویر هست و میخام بصورت parallel کار کنه یعنی GPU دیگر منتظر آماده کردن دیتای توسط CPU باشد آیا کد شما این مسئله رو حل میکنه ؟ و این کدی که قراره امروز و فردا قرار دهید برای تمامی دیتاست ها کار میکنه ؟ باز هم تاکید میکنم من کد مروبط به پارالل مد نظرم هست . که بصورت input pipeline باشه .
یک کد نمونه هست که میشه بصورت کلی روی تمامی دیتاست های عکس کار کرد و به tfrecord تبدیلش کرد .
https://kwotsin.github.io/tech/2017/01/29/tfrecords.html
سوال دوم : بنظرتون ترین شبکه بصورت فایل های تصویر بنظرتون مناسبه یا اینکه از روی tfrecord ؟ اینجا گفته شده که سرعت ترین شبکه با tfrecord بالا میره.
فرمت tfrecord فرمت استاندارد خود تنسورفلو هستش
https://www.tensorflow.org/api_guides/python/reading_data
و قطعا اون موضوع موازی کاری را هم داره. کدی که بنده تو گیت هابم گذاشتم و با اون یه شبکه رو با استفاده از دیتاست تصویر تبدیل شده به فایل های tfrecord  آموزش دادم  این موضوع رو پشتیبانی می کنه.

بهتره ابتدا تصاویرتون رو قبل از آموزش بخونید پیش پردازش روش انجام بدید بعد تو فایل tfrecord‌ ذخیره کنید. اینجوری موقع آموزش درگیر پیش پردازش نمیشید و دیتا مثل یه لقمه آماده  پاس داده میشه تو gpu.
یا حتی اگر نمیتونید این کارو بکنید و نمیخواید هم gpu‌ در گیر بشه به تنسورفلو بگید که دستورات پیش پردازش رو روی cpu اجرا کنه.
" و قطعا اون موضوع موازی کاری را هم داره. کدی که بنده تو گیت هابم گذاشتم و با اون یه شبکه رو با استفاده از دیتاست تصویر تبدیل شده به فایل های tfrecord  آموزش دادم  این موضوع رو پشتیبانی می کنه. "
یعنی ابتدا دیتاست رو به tfrecord تبدیل میکنید و بعد برای ترین شبکه ازش استفاده میکند ؟ توش پیش بردازش هم صورت میگیرد یا موقع ترین انجام میشه ؟
بیزحمت اسم اون فایل تو گیت هاب رو بگید . و اینکه چند روز آینده فایل روی تو گیت هاب قرار میدهید چه فرقی با این یکی دارد؟
و اون لینکی که بالا لینک کردم بنظرتون این موازی سازی رو رعایت کرده ؟ و پیش بردازش هم انجام میدهد ؟
در کدی که بنده نوشتم پیش پردازش نداره. شما به تناسب کارتون رو ی تصاویرتون پیش پردازش انجام بدید و سپس به فایل tfrecord تبدیلش کنید و با استفاده از اون شبکه رو آموزش بدید.
بنده کدم تقریبا تموم شده هستش با استفاده روش استفاده شده در این کد برای خوندن دیتاست
https://github.com/m-nasiri/tensorflow/blob/master/reading_image_dataset
یه شبکه رو آموزش دادم احتمالا تا یکی دو روز دیگه آپلود می کنم.
کدی که آدرس دادین موازی سازی داره مانند کدیه که بنده تو گیت گذاشتم. ولی پیش پردازش نداره. پیش پردازش به کاربردتون بستگی داره. باید خودتون اضافه کنید.
الان کدی شما قرار هست قرار دهید نسب به این کدی که من قرار دادم برتری داره یا اینکه تقریبا یکی هستند ؟
کدی که شما آدرس دادید دیتا رو به tfrecord‌ تبدیل می کنه که کاملترش تو گیت بنده هشتش


کد تبدیل دیتاست به tfrecord
https://github.com/m-nasiri/tensorflow/tree/master/tfrecord
کد آموزش شبکه رو استفاده از فایل tfrecord  که موازی بودن توش رعایت شده.
https://github.com/m-nasiri/tensorflow/tree/master/shape_conv_net_using_tfrecord


کد خواندن مستقیم دیتاست تصوریر بدون تبدیل به tfrecord  (موازی بودن توش رعایت شده)   
https://github.com/m-nasiri/tensorflow/tree/master/reading_image_dataset

کد آموزش یک شبکه با استفاده از خوندن مستقیم دیتاست که موازی بودن توش رعایت شده تو چند روز‌ آینده میزارم.
متشکر
بنظرتون تو سرعت ترین با tfrecord بهتره یا اینکه مستقیم خوندن از دیتاست ؟
سوال دیگه : بنظرتون چجوری میشه این فایل هایی که شما گفتید رو برای مثلا شبکه های inception استفاده کرد ؟ اینجا خودتون تابع معماری شبکه رو تعریف کردید ولی اونجا چجوری میشه اینکا رو کرد ؟ و اینها رو به کدهای تنسورفلوی اونها اضافی کرد؟ بخصوص TF-SLIM
و اینکه چرا از png استفاده میکنید برای تصاویر
تو اینجا
http://qa.deeplearning.ir/4705/sharding-data?show=4713#c4713
براتون توضیح دادم که چرا tfrecord بهتره البته اگه شرایط اجازه بده برای این کار.

بنده معماری inception رو مطالعه نکردم ولی شما باید دیتای ورودی رو مطابق با inception قرار بدید بعد مثلا تو فایل tfrecord   ذخیره کنید و بعد از فایل بخونید و شبکه رو آموزش بدید.

فرقی نداره شما از فرمت های دیگه استفاده کنید. مشکلی پیش نمیاد.

اینم برنامه ای برای خوندن دیتاست تصویر بطور موازی و آموزش یک شبکه با این روش + ذخیره مدل  + نمایش برخی پارامترها در tensorboard
https://github.com/m-nasiri/tensorflow/tree/master/symbol_texture_image_conv_net/

موفق باشید.
...