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

با تشکر

دسته بندی ها

0 امتیاز

سلام
میخوام به ConvLSTM2D تصویر بدم

model = Sequential()
model.add(ConvLSTM2D(filters=32, kernel_size=(3, 3),
                   input_shape=(None, width, height, 1),
                 padding='same', return_sequences=True))

ولی میگه ابعاد مورد داره

ValueError: Error when checking input: expected conv_lst_m2d_17_input to have 5 dimensions, but got array with shape (19, 300, 800, 1)

مدلم هم اینجوریه

Layer (type)                 Output Shape              Param #   
=================================================================
conv_lst_m2d_17 (ConvLSTM2D) (None, None, 300, 800, 32 38144     
_________________________________________________________________
batch_normalization_9 (Batch (None, None, 300, 800, 32 128       
_________________________________________________________________
conv_lst_m2d_18 (ConvLSTM2D) (None, None, 300, 800, 32 73856     
_________________________________________________________________
batch_normalization_10 (Batc (None, None, 300, 800, 32 128       
_________________________________________________________________
conv_lst_m2d_19 (ConvLSTM2D) (None, None, 300, 800, 64 221440    
_________________________________________________________________
batch_normalization_11 (Batc (None, None, 300, 800, 64 256       
_________________________________________________________________
conv_lst_m2d_20 (ConvLSTM2D) (None, None, 300, 800, 64 295168    
_________________________________________________________________
batch_normalization_12 (Batc (None, None, 300, 800, 64 256       
_________________________________________________________________
dense_13 (Dense)             (None, None, 300, 800, 64 4160      
_________________________________________________________________
dense_14 (Dense)             (None, None, 300, 800, 1) 65        
_________________________________________________________________
activation_63 (Activation)   (None, None, 300, 800, 1) 0         
=================================================================
Total params: 633,601
Trainable params: 633,217
Non-trainable params: 384
_________________________________________________________________

به صورت

input_shape=(None,None, width, height, 1)

دادم میگه

ValueError: Input 0 is incompatible with layer conv_lst_m2d_21: expected ndim=5, found ndim=6

1- هدفم اینه تصویری رو جوری کانولوشن بزنه که مقادیر قبلی کانولوشن یادش باشه، فکر کنم با این تابع بشه درسته ؟(یعنی تو تصویر از چپ به راست که داره کانولوشن میزنه یا باشه سمت چپ تصویر چی بوده)
2- چطور ابعداد رو درست کنم که کار کنه ؟
با تشکر

توسط (208 امتیاز)

1 پاسخ

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

سلام
1- بله اگه تصاویر شما در زمان با هم correlation دارن استفاده از این لایه می تونه کمک کنه
2- نحوه تعریف کردن ساختار شبکه درسته و نیازی نیست که یه بعد دیگه به input_shape اضافه کنید، فقط مشکلی که هست اینه که توی ورودی دادن به شبکه یه بعد کم داده می دید
یعنی آرایتون باید اینطوری باشه :

(batch_size,time_steps, height, width, channels)

مثلا توی مثالی که روی خوده keras هست، ایده اینه که از طریق فریم‌های پیشین، فریم بعدی رو توی تصویر پیش بینی کنیم
حالا اومده فیلم های 40x40 درست کرده (با یه کانال)، که 3 تا 7 مربع توش حرکت می کنن
از این فیلم ها، 1200 تا درست کرده (میشه batch_size) هر فیلم 15 فریم (میشه time_steps) و اندازه مکانی، 40x40 (میشه height و width) و هر فریم هم 1 دونه کانال داره و ورودی به این صورت در میاد:

(1200,15,40,40,1)

شما توی کدتون یه کدوم ابعاد متناظر با batch_size یا time_step رو درست نمی دید. یعنی مثلا 19 تا فریم دادید که باید یه پیش بینی روش اتفاق بیوفته، اما تعداد batch مشخص نیست. مشکل هم توی ابعاد input_shape نیس و اونجا نباید اصلا تعداد batch رو مشخص کنید و خودش در نظر گرفته، اما مشکل در آرایه ورودی و دیتا هایی که تولید کردید

کد مربوط به مثال Keras :

https://github.com/fchollet/keras/blob/master/examples/conv_lstm.py

توسط (1.6k امتیاز)
انتخاب شده توسط
ممنون از پاسختون
من بیشتر دنبال اینم که توی یک تصویر(نه چند تصویر)
مثلا یه پیکسل تو سمت چپ تصویر با یه پیکسل تو سمت راست تصویر ارتباط داره شبکه یادش باشه چی دیده تو کانولوشن های قبلی
و یا یه پیکسل توی موقعیت 100,100 با 150,250 رابطه داره (دو جسمی که به هم رابطه دارن نزدیک هم نیستن کانولوشن باید یادش بمونه چی دیده و کجا دیدش)
فکر کنم یه راه اینه که بعد لایه ی FC یه LSTM قرار داده بشه که مفید نبود
یا یک تصویر رو به تصاویر کوچیکتر تقسیم کنم و بدم به lstm2d ?
چه راهکاری به نظرتون میرسه
با تشکر
ساختار لایه ConvLSTM برای این چیزی که شما میگید ساخته نشده، مقالش رو هم ببینید بیشتر متوجه کارکردش میشید:
https://arxiv.org/pdf/1506.04214v1.pdf
میشه یه سری ایده در حد هک و کلک زد که مثلا به جای یه تصویر ، همون تصویر رو چندین بار استفاده کنیم به عنوان بعد زمان، شاید یه چیزی از توش در بیاد اما اصولی درست و حسابی پشتش نیس

بهتره برای این کار یا مستقیما از تصویر استفاده کنید و برید سراغ شبکه های Grid RNN
https://arxiv.org/abs/1507.01526
که برای هر پیکسل یا ناحیه بردارهای ویژگی بدست میارید که به کل تصویر وابستس و اون ارتباطی که میخواید برقرار میشه (البته بحثهای مرتبط با مشکل long term dependencies و این چیزا جای خودش هست)

یا از لایه های ReNet که جدیدتر هم معرفی شدن استفاده کنید
https://arxiv.org/abs/1603.04871

به خصوص این ایده ReNet  به چیزی که شما مدنظرتون خیلی نزدیکه. نمی دونم توی چه کتابخونه هایی پیاده شده اما با چیزهایی که توی tensorflow هست پیاده سازیش سخت نیس
ValueError: Input 0 is incompatible with layer conv_lst_m2d_2: expected ndim=5, found ndim=4
...