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

با تشکر

دسته بندی ها

0 امتیاز

دوستان اگر امکان دارد یکم در مورد اینها بیشتر توضیح دهید و اون مثال نمونه که در پایین هست رو بگید چجوریه

مقدار ۰
یعنی ابعاد مورد نظر را از لایه پایینی کپی کن. این یعنی اگرلایه پایینی ۲ را بعنوان اولین بعد خود داشت, لایه بالایی هم اگر dim: 0 را برای اولین بعد خود مشخص کرده بود ,برای اولین بعد خود عدد ۲ را تنظیم خواهد کرد.
مقدار ۱-
این مقدار به معنای ” از بقیه ابعاد , اندازه این بعد را بدست بیاور” است. این رفتار شبیه مقدار ۱- در numpy و یا [] در متلب است . این بعد محاسبه میشود تا تعداد مولفه کلی به اندازه لایه پایینی باشد. تنها از یک ۱- در عملیات reshape استفاده کرد.
بعنوان یک نمونه مثال دیگر , با تعریف reshape_param { shape { dim: 0 dim: ‐1 } } باعث میشود تا لایه دقیقا مثل لایه Flatten عمل کند

layer {
	name: "reshape"
	type: "Reshape"
	bottom: "input"
	top: "output"
	reshape_param {
		shape {
			dim: 0 # بُعد را از لایه زیرین کپی کن
			dim: 2
			dim: 3
			dim: -1 # باتوجه به بقیه ابعاد این بُعد را بدست بیاور
		}
	}
}

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

1 پاسخ

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

برای اینکه reshape با resize قاطی نشه مفهومش ، اول یه مقدمه بگم که توی reshape مثلا می‌خوایم یه ماتریس 4x3 رو بکنیم 2x6 یا اینکه یه تنسور سه بعدی با ابعاد 3x4x5 رو ابعادش رو تغییر بدیم به 1x60 (که میشه همون عملیات Flatting یا برداری کردن یه تنسور)
حالا لایه Reshape توی caffe یا کتابخونه های دیگه هم همینکارو انجام میده
مثلا وقتی می‌خواید همون ماتریس 4x3 رو تغییر بدید به 2x6 می تونید اینطوری بنویسید

reshape_param { shape { dim: 2 dim: ‐1 } } 

یعنی اینکه بعد اول ما 2 باشه، بعد دوم رو هم خودش بره حساب بکنه چند میشه(چون تعداد عناصر باید ثابت بمونه حساب کردنش خیلی سادس یعنی ، 4x3 = 2xT که T همون 6 بدست میاد)
این برای کارکرد -1

حالا برای 0، می تونیم این مثال رو بزنیم که فرض می‌کنیم تنسور 3x4x5 داریم و می‌خوایم بشه یه ماتریس 3 در یه تعدادی ستون. اگه خودمون باشیم که می دونیم که میشه 3 در 20 اما دوباره میشه اینجا از -1 استفاده کرد

reshape_param { shape { dim: 0 dim: ‐1 } } 

این کد میگه که بعد اول رو بذار همون بعد اول ورودی به لایه reshape (یعنی 3) و بعد دوم رو هم خودت حساب کن چند میشه( که میشه 20)

یا اینطوری اگه مثال بزنیم

reshape_param { shape { dim: 0 dim: 2 dim:-1 } } 

منظور اینه که بعد اول هرچی هست همون بمونه (3)، بعد دوم بشه 2 و بعد سوم رو هم خودت حساب کن که در نهایت خروجی می شه 3x2x10

مثال خوده Caffe هم اینطوری تفسیر میشه ، بعد اول رو هرچی هست بذار (که چون اینجا ورودی 4 بعدی هست، بعد اول معمولا تعداد داده‌های ورودی به شبکه است، یا همون اندازه minibatch توی training یا 1 توی تست‌ شبکه در شرایط واقعی)
بعد دوم بشه 2، بعد سوم بشه 3، و بعد چهارم رو هم بر اساس ابعاد دیگه بدست بیار
مثلا اگه اول کار 10x4x6x3 بوده ، بعد از این لایه میشه 10x2x3x18

منبع:
http://caffe.berkeleyvision.org/tutorial/layers/reshape.html

توسط (1.6k امتیاز)
انتخاب شده توسط
...