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

با تشکر

دسته بندی ها

0 امتیاز

سلام
میخوام یک تصویر رو به همراه یک سری داده ی عددی رو بدم به یک شبکه
دو مدل ساختم یکی برای تصویر و یکی برای اعداد، آخر هر مدل flatten کردم و بعد concate کردمشون

1- آیا flatten کردن هر مدل و بعد concate کردنشون با هم کار درستی هست ؟
2- آیا ساختار رو درست چیدم ؟
3- چیزی مشابه maxpool تو شبکه ی conv برای شبکه ی dense هم داریم ؟ (میخوام تعداد ویژگی تو لایه ی m2_drop3 رو کم کنم، چون الان 131288 تا ویژگی میده به لایه ی بعدی)

from keras import regularizers
from keras.models import Sequential,Model
from keras.layers import Conv2D, MaxPooling2D,BatchNormalization,Conv3D
from keras.layers import Activation, Dropout, Flatten, Dense,TimeDistributed,Bidirectional,LSTM,Reshape

import keras 
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

# Model 
#img <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
input1 = keras.layers.Input(shape=(300, 800,1))
conv1= Conv2D(filters=4,kernel_size=(5,5),strides=(3,3), activation='relu')(input1)
max1= MaxPooling2D(2,1)(conv1)
drop1= Dropout(0.25)(max1)

conv2= Conv2D(filters=8,kernel_size=(5,5),strides=(3,3), activation='relu')(drop1)
max2= MaxPooling2D(2,1)(conv2)
drop2= Dropout(0.25)(max2)

flat1=Flatten()(drop2)
#>>>>>>>>>>>>>


# data
input2 = keras.layers.Input(shape=(16411,1))
m2_dense1= Dense(512,kernel_initializer='lecun_uniform', activation='relu')(input2)  # kernel_regularizer=regularizers.l2(0.01)
m2_drop1= Dropout(0.5)(m2_dense1)

m2_dense2= Dense(256,kernel_initializer='lecun_uniform', activation='relu')(m2_drop1) 
m2_drop2= Dropout(0.5)(m2_dense2)

m2_dense3= Dense(8,kernel_initializer='lecun_uniform', activation='relu')(m2_drop2) 
m2_drop3= Dropout(0.5)(m2_dense3)

flat2=Flatten()(m2_drop3)

#############
flat=keras.layers.concatenate([flat1,flat2], axis=-1)


fc_dense1= Dense(256, activation='relu', kernel_regularizer = regularizers.l2(0.001))(flat)
fc_drop1= Dropout(0.96)(fc_dense1)

fc_dense2= Dense(8, activation='relu', kernel_regularizer = regularizers.l2(0.001))(fc_drop1)
fc_drop2= Dropout(0.7)(fc_dense2)

out=Dense(1,activation='sigmoid')(fc_drop2)

model = keras.models.Model(inputs=[input1,input2], outputs=out)

model.summary()
توسط (208 امتیاز)

1 پاسخ

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

سلام.
این که روی چه تسکی همچین مدلی رو زدی رو نمیدونم. شاید با توجه به کاربردهای مختلف رویکرد تعریف معماری بهینه فرق کنه. این که چقدر از اطلاعات مکانی تصویر برات مهه و ...
ولی اون طور که میشه حدس زد مساله نهایی طبقه بندی دو کلاسه است احتمالا. در مورد سوالات:
1- این که flatten کنی بعد concatenate کنی در کل کار اشتباهی نیست.
2- ساختار شبکه اشتباه نیست. ولی این که ساختار بهینه است یا نه رو باید خودت تست کنی. با توجه به تسک. (مثلا میتونی برای خروجی هر مدل یه تابع هزینه جدا تعریف کنی و بعد خروجی دو مدل رو ترکیب کنی و خروجی ترکیب شده رو به تابع هزینه سوم و نهایی بدی)
3- چیزی که من تو کد شما میبینم خروجی m2_dense3 تعداد 8 نورون دارد و زیاد نیست. اما این عددی که شما گفتی میشه 8*16411 که فکر میکنم لایه های Dense شما به بعد آخر shape اعمال شدن. عدد 1 در shape را حذف کنید.

البته من کد شما رو ران نکردم و نمیدونم ارور داره یا نه. توی تعریف shape ورودی هم اون بعدی که سایزش 1 هست رو نمیدوم به چه دلیل گذاشتی. ولی اگه منظورت این بوده که ورودی به صورت بردار یک بعدی هست باید اون 1 رو حذف کنی.

توسط (540 امتیاز)
انتخاب شده توسط
سلام
ممنون از پاسختون
1- اطلاعات مکان اشکال تو تصویر و نیز مکان قرار گیریشون نسبت به هم دیگه مهم هستن برام کجای شبکه باید حواسم باشه بهش؟و چه ساختار دیگه ای میشه زد که تست کنم ؟
2- مسئله کلاسه بندی هست و تابع هزینه یکی هست در هر دو داده ، با این شرایط هم تعریف دو شبکه ی جدا و یکی کردنشون اثر داره ؟
من بیشتر نگران learning rate هستم که برای دو داده یک LR یکسان شاید خوب نباشه
3- ورودی بدون یک قبول نمیکنه ولی Input(shape=(1,16411 دادم درست شد و لایه ی آخر همون 8 ویژگی میمونن.
1- اگه اطلاعات مکانی تصویر مهمه به طوری که مثلا تشخیص مکان یک جسم کوچک تو تصویر مهم باشه باید دقت کنید که سایز مکانی آخرین لایه کانولوشن خیلی کوچک نباشه.
2- اگه مساله کلاس بندی هست فکر نکنم مکان اجسام تو تصاویر مهم باشه. برای انتخاب تابع هزینه برای شبکه ها و ترکیبشون هم یک مزیتش اینه که اگه تعداد دادگان کم باشه شبکه کوچک تر راحتتر ترین میشه. البته میتونید تست کنید ببینید که برای کار شما این رویکرد چقدر موثره.
3- قاعدتا نباید این طور باشه. shape=(16411,) باید کار کنه. در واقع shape باید به صورت یه tuple باشه که عضو اولش 16411 هست و عضو بعدی خالیه (برای این که tuple تک عضوی رو از عملگر پرانتز تفکیک بده برای تعریف tuple تک عضوی از شکل (,16411) استفاده میشه)
...