Tensorflow(@CVision)
13.9K subscribers
1.17K photos
239 videos
68 files
2.23K links
اخبار حوزه یادگیری عمیق و هوش مصنوعی
مقالات و یافته های جدید یادگیری عمیق
بینایی ماشین و پردازش تصویر

TensorFlow, Keras, Deep Learning, Computer Vision

سایت دوره
http://class.vision

👨‍💻👩‍💻پشتیبان دوره ها:
@classvision_support
Download Telegram
#سوال
طبق Occam’s razor principle پاسخ این سوال چیست؟

جواب:
https://t.me/cvision/1098

#occam
Tensorflow(@CVision)
Photo
#آموزش #keras

#سوال:
به نظر شما چرا انقدر loss و accuracy دیتای validation نوسان دارد و از 0 تا 100 دائما نوسان میکند؟

#پاسخ احتمالی 1:
ممکن است بگویید lr زیاده! اما دیتای train نوسانی نداره. پس این جواب اشتباهه.
راهنمایی #پاسخ درست:
به اندزه‌ی سایز batch در validation_generator و تعداد عکسهایی که این generator پیدا کرده دقت کنید!
#سوال:
روی یک کامپیوتر چند GPU دارم. چه طور مدلی که با keras ایجاد کردم را روی همه GPU ها آموزش دهم؟

#پاسخ:
طبق این دستور العمل به راحتی میتوانید با استفاده از تابع multi_gpu_model مدل خود را به مدل multi_GPU تبدیل کرده و این مدل را آموزش دهید. در این صورت از تمام GPU های سیستم می‌توانید استفاده کنید.

#سوال:
قبلا (بیش از 1 سال پیش) در این پست کانال و این پست نوشتیم که از تنسرفلو 1.4 به بعد میشه مدل را به #estimator تنسرفلو تبدیل کرد.
خب esetimator که multi_GPU داره و با این روش هم میشه مدلو توزیع شده و یا رو چند GPU اجرا کرد.
آیا روشی که در بالا معرفی شد نسبت به آن روش مزیتی دارد؟

#پاسخ:
وقتی یک مدل #Keras را به estimator تبدیل می‌کنید، فقط معماری مدل را تبدیل کرده و متدهای #callback ی که برای این مدلتون تعریف کردید، نظیر تغییر Learning rate طبق سیاست هایی که نوشتید از کار میوفته!
اما متد multi_gpu_model بازهم یک مدل #keras به شما برمیگرداند، نه estimator و در نتیجه تمامی خاصیت های مدل از جمله callback method ها را حفظ خواهد کرد.
#سوال :
آیا میتوان شبکه ای که با ورودی 224 در 224 آموزش دیده را با سایز ورودی دیگری آموزش داد ؟

#پاسخ :
بله. اگر معماری شبکه متشکل از لایه globalAveragePool باشد این کار امکان پذیر میباشد. در این لایه به دلیل نمونه برداری عمقی از لایه کانولوشن مستقل از سایز سطر در ستون کانولوشن بوده و برای مپ کردن به لایه تمام متصل بعدی برخلاف flatten مشکلی ایجاد نخواهد شد
مثال : شبکه resnet

#نحوه انجام کار :
برای تغییر سایز ورودی شبکه ترین شده در keras آن را لود کرده و به صورت زیر سایز ورودی شبکه را تغییر میدهیم.
model = load_model('checkpoint.h5')
input_layer = InputLayer(input_shape=(img_width, img_hight, channel), name="input_1")
model.layers[0] = input_layer
model.save("checkpoint-reshaped.h5")

در نهایت با دستور زیر نیز میتوانید سایز ورودی لایه و تمام لایه های شبکه را مشاهده نمایید
model.summary()

#کاربرد :
1 - ابتدا شبکه را با سایز ورودی کوچک آموزش داده و پس از چند ایپاک که به درصد دقت مناسبی رسیدیم سایز ورودی را بزرگ کرده و ادامه دهیم یا بر عکس.
2 - متناسب با کاربرد مسیله خود شبکه از قبل آموزش دیده روی دیتاست های بزرگ و جامع تر را با سایز ورودی مناسب تر فاین تیون کنیم.
توضیحات بیشتر :
https://www.aparat.com/v/YgEDH
#آموزش و طرح #ابهام مستندات چند نخی در کراس - بخش 1 از دو

استفاده از use_multiprocessing و workers در fit_generator کراس
طرح یک ابهام در داکیومنت های #Keras !

#سوال:
احتمالا میدونید که اگر با دیتاست های خیلی بزرگ تصویری سر و کار داشته باشید، خیلی وقت ها bottleneck فرآیند آموزش خواندن تصاویر از هارد و augmentation توی pipeline آموزش CPU میشه و GPU معطل دیتا میمونه و بیکار میمونه و Utilization سیستم میاد پایین!
راهکارتون چیه؟

#پاسخ:
استفاده از پارامتر use_multiprocessing=True اجازه میده که process-based threading فعال بشه و با چند نخ و موازی دیتا خوانده و augment بشه
اما یه پارامتر دیگه هم باید ست کنید؛ و اونم عددی برای workers هستش.
توضیحات در داکیومنت:
Maximum number of processes to spin up when using process-based threading.

با این دو پارامتر میتونید به صورت موازی دیتا را خوانده و پیش پردازش کنید و با افزایش سرعت آماده کردن دیتا میتونید از بیکار بودن GPU جلوگیری کرده و utilization اونو افزایش بدید.

اما
#ابهام داکیومنت کجاست حالا؟

اگر دقت کنید نوشته:

workers: Integer. Maximum number of processes to spin up when using process-based threading.

از طرفی داشتیم:
use_multiprocessing: Boolean. If True, use process-based threading.

من به شخصه وقتی این دو جمله را میخونم برداشتم اینه که عددی که جلوی workers مینویسم فقط برای وقتیه که use_multiprocessing را True ست کرده باشم.
برداشت دیگه ای میشه داشت؟؟

مشاهده داکیومنت: https://keras.io/models/sequential/

ادامه در: https://t.me/cvision/1360
#آموزش

نزدیک یک ماه پیش مهندس قریشی پستی در کانال منتشر کردند که با این سوال شروع شده بود:

آیا میتوان شبکه ای که با ورودی 224 در 224 آموزش دیده را با سایز ورودی دیگری آموزش داد ؟

سایت pyimagesearch پنج روز پیش پستی با عنوان Change input shape dimensions for fine-tuning with Keras منتشر کرده که همین موضوع را توضیح داده است:

Q. Can I fine-tune a CNN on image dimensions *smaller* than what it was originally trained on?
A. Yes, you can!

https://www.pyimagesearch.com/2019/06/24/change-input-shape-dimensions-for-fine-tuning-with-keras/


مطلب مرتبط در کانال:
https://t.me/cvision/1295
#سوال
آیا میتوان روی یک سیستم، دو نسخه متفاوت از cuda داشت؟!
پاسخ
بله، مثلا میشه همزمان کودا ۱۰.۰ و ۱۰.۱ و ۱۰.۲ روی ماشینتون نصب کنید.
و مثلا هم‌زمان تنسرفلو ۱.۱۴ و ۲.۲.۰ هم توی محیط‌های مجزا داشته باشید که هر کدام از نسخه کودا مورد نیاز استفاده کنند و بدون مشکل کار کنن.

نصب کودا رو میتونید با خود ریپوها انجام بدید

فقط مثلا تو سیستم عامل لینوکس، توی .bashrc برید و مسیرهای کوداها رو برای هر نسخه جدا اضافه کنید به ld_library_path.

کودا بدون پیشوند هم یه سافت‌لینکه به نسخهٔ آخری که نصب می‌کنید. ولی می‌تونید خودتون برید اون چیزی که دوست دارید پیش‌فرض باشه را بذارید.

🙏Thanks to: @samehraboon

Tensorflow(@cvision)