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

با تشکر

0 امتیاز

سلام
من 60,000 تصویر دارم هرکدوم 20 کیلوبایت و ابعاد 1590*700 و حجم کلی 1.3 گیگ
وقتی لود میکنم به صورت gray تو پایتون با 20% این دیتا رم 32 گیگم پر میشه !!

`img= misc.imread(path,True)`!

1- اگر نخوام resize کنم(چون خیلی از ویژگی های تصویرم میپره) راه دیگه ای هست که کیفیت تصویر پایین نیاد و رم رو هم پر نکنه که عکس اصلی رو بدم به شبکه ؟
2- عکس رو با scipy بخونم یاcv2 فرقی از نظر حافظه ی RAM میکنه ؟
3- این کارم کردم ولی نمیدونم step per epoch , epoch , validation stepتو
fit generator چی هستن و فرقشون با batch size تو flow_from_directory چی هست ؟
سوال دیگه اینکه مدل از قبل ساخته و کامپایل میشه و با fit generator آموزش میبینه !؟
کد زیر اشکالش چیه ؟

width=300
height=500

batch_size = 32

test_datagen = ImageDataGenerator(rescale=1./255)

train_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        'f:/train',  # this is the target directory
        target_size=(width, height),  # all images will be resized to 150x150
        batch_size=batch_size,
        color_mode= "grayscale",
        class_mode='binary')  # since we use binary_crossentropy loss, we need binary labels

# this is a similar generator, for validation data
validation_generator = test_datagen.flow_from_directory(
        'f:/validation',
        target_size=(width, height),
        batch_size=batch_size,
        color_mode= "grayscale",
        class_mode='binary')

  


from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(width, height,1))) #??????????????????????????????????????????????????????
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# the model so far outputs 3D feature maps (height, width, features)

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])




model.fit_generator(
        train_generator,
        steps_per_epoch=int(train_generator.samples/train_generator.batch_size),
        epochs=3,
        validation_data=validation_generator,
        validation_steps=10)

با تشکر

سوال شده توسط (208 امتیاز)
ویرایش شده توسط

1 پاسخ

+3 امتیاز

سلام.
قطعا این حجم دیتا باعث میشه رم پر بشه و ارور بده. حجم دیتا برابر هست با (حجم هر پیکسل رنگی رو 3 بایت در نظر گرفتم اگه تصویر رنگی باشه. اگه هم خاکستری باشه 1 بایت):
15907003*60000 = 200GB

1- بله. قطعا هست. خیلی از دیتاستها مثل image-net اصلا تو رم جا نمیشن که لود بشن یه جا. یه راهش اینه که خودتون یه حلقه for بنویسید و تیکه تیکه از دیتا رو لود کنید و ترین کنید و به این ترتیب ادامه بدید. (از دستور model.train_on_batch استفاده کنید). نمونه ای از دستورش و توضیحاتش تو لینک زیر هست:

https://faroit.github.io/keras-docs/2.0.2/models/sequential/

همچنین میتونید از generator مشابه همین دستوراتی که نوشتید استفاده کنید.

https://faroit.github.io/keras-docs/2.0.2/getting-started/faq/#how-can-i-use-keras-with-datasets-that-dont-fit-in-memory

2- چه opencv چه scipy باشه در هر صورت جفتشون رو باید به numpy array تبدیل کنید (که قاعدتا نباید حجم اشکال شده فرق کنه)
3- در مورد generator این طور هست که شما برای نحوه خواندن دیتا از هارد یه generator تعریف میکنید (علاوه بر خواندن دیتا میتونید یه سری تنظیمات برای data augmentation هم داشته باشید (مثلا تصاویر رو رندم crop کنید)). این generator به صورت همزمان با پروسه آموزش ران میشه. مثلا اگه ترین شما رو GPU انجام میشه قسمت مربوط به generator که مربوط به خواندن و پیش پردازش دیتا هستش روی cpu همزمان و به صورت بهینه برای بالا بودن سرعت اجرا میشه . وقتی شما دستور fit_generator رو اجرا میکنید همزمان شبکه به صورت موازی دیتا رو از هارد میخونه و پیش پردازش میکنه و شبکه رو باهاش ترین میکنه. ) (اگه تنسورفلو کار کرده باشید این فرایند مشابه tf.train.batch_join هستش:

https://www.tensorflow.org/api_docs/python/tf/train/batch_join

پس دستور fit_generator همزمان به صورت موازی دیتا رو میخونه و عملیات forward و backward و update رو انجام میده.
پارامتر epoch تعداد دفعاتی که شبکه قراره کل دیتا رو ببینه مشخص میکنه. مثلا epoch برابر 5 یعنی شبکه 5 بار کل دیتا رو میبینه و باهاش آموزش میبینه. پارمتر batch size سایز دیتا تو هر بچ یا در هر فوروارد و بک وارد رو نشون میده. مثلا اگه 32 باشه یعنی در هر بار آپدیت شبکه تعداد 32 عکس استفاده میشه. پارامتر steps_per_epoch تعداد تکرارها برای هر epoch رو مشخص میکنه که مقدار صحیحش برابر است با :
(NumImages / batchSize = int(60000/32
پارمتر validation step تعداد دادنگانی که در انتهای هر epoch برای ارزیابی دقت شبکه بر روی دادگان ولیدیشن استفاده میشه رو مشخص میکنه. در مورد پارمترهای fit_generator توی همون اولین لینکی که گذاشتم توضیح کاملتری هست.

پاسخ داده شده توسط (535 امتیاز)
سوال دومتون رو دقیق متوجه نشدم. در واقع شما کل دیتا رو لود میکنید رو رم بعد ترین میکنی؟ اگه این کار رو میکنید حجم مورد نیاز از رم برابر هست با:
50*50*3*60000 ~= 450MB
200*400*3*60000 ~= 14 GB

اگه تو لینوکس هستید میتونید برنامه gpu_stat رو از لینک زیر نصب کنید و در ترمینال دما و مموری گرافیک رو مانیتور کنید:
sudo pip install gpustat

https://github.com/wookayin/gpustat
سلام
ممنون از پاسختون
تو صورت سوال کد رو آوردم که چجوری لود کردم (از generator استفاده کردم)
نکته : تصویر ورودی گری هم هست ! و روی ویندوز دارم اجرا میکنم.
1- فقط موندم چرا با دو گیگ رم فقط با مقدار دو اپوچ ران میشه و اپوچ رو که زیاد میکنم خطا میده !(سرچ کردم خطای حافظه ی GPU میده)
2- دو اپوچ چند عکس لود میکنه که دو گیگ رو پر میکنه؟
3- برای ویندوز چطور میشه چک کردGPU رو

با تشکر
سلام. دو تا سوال اولتون رو تو یه پست دیگه گفتم.
ولی در مورد سوال سومتون: برنامه gpustat پکیج پایتون هست و قاعدتا تو ویندوز هم باید بشه ازش استفاده کرد. البته من در ویندوز تست نکردم و مطمئن نیستم.
ولی اگه سرچ کنید برای ویندوز قطعا برنامه هایی برای مانیتو gpu هست. مثلا من الان یه سرچ ساده زدم برنامه زیر رو پیدا کردم (البته تستش نکردم)
https://www.techpowerup.com/gpuz/
...