কেরাসে দুটি ভিন্ন মডেল একত্রিত করা হচ্ছে


26

আমি দুটি কেরাস মডেলকে একক মডেলে একীভূত করার চেষ্টা করছি এবং আমি এটি সম্পাদন করতে অক্ষম।

সংযুক্ত চিত্র মধ্যে উদাহরণস্বরূপ, আমি মধ্যম স্তর আনতে চাই মাত্রা 8, এবং স্তর ইনপুট হিসাবে ব্যবহার বি 1 মডেল মধ্যে (মাত্রা 8 আবার এর) বি এবং তারপর একত্রিত উভয় মডেল একটি এবং মডেল বি যেমন একটি একক মডেল।A2B1BAB

আমি মডেল এবং মডেল বি স্বাধীনভাবে তৈরি করতে ক্রিয়ামূলক মডিউলটি ব্যবহার করছি । আমি এই কাজটি কীভাবে সম্পাদন করতে পারি?AB

দ্রষ্টব্য : হ'ল মডেল এ- এর ইনপুট স্তর এবং বি 1 মডেল বি- এর ইনপুট স্তর ।A1AB1B

ছবি দেখো

উত্তর:


22

আমি আমার প্রশ্নের উত্তর বের করেছিলাম এবং উপরের উত্তরটির ভিত্তিতে কোডটি এখানে দেওয়া হয়েছে।

from keras.layers import Input, Dense
from keras.models import Model
from keras.utils import plot_model

A1 = Input(shape=(30,),name='A1')
A2 = Dense(8, activation='relu',name='A2')(A1)
A3 = Dense(30, activation='relu',name='A3')(A2)

B2 = Dense(40, activation='relu',name='B2')(A2)
B3 = Dense(30, activation='relu',name='B3')(B2)

merged = Model(inputs=[A1],outputs=[A3,B3])
plot_model(merged,to_file='demo.png',show_shapes=True)

এবং আমি যে আউটপুট কাঠামোটি চেয়েছিলাম তা এখানে:

এখানে চিত্র বর্ণনা লিখুন


লক্ষ্য করুন যে তুমি না দুটি মডেল উপরে মার্জ (keras মডেল অর্থে), আপনি স্তর মার্জ করছি।
জেনেটেড

7

কেরাসে একটি মডেল সংজ্ঞায়িত করার জন্য একটি কার্যকর উপায় রয়েছে: ক্রিয়ামূলক API ব্যবহার করে । ফাংশনাল এপিআই দিয়ে আপনি স্তরগুলির একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ সংজ্ঞায়িত করতে পারেন, যা আপনাকে সম্পূর্ণ স্বেচ্ছাচারী আর্কিটেকচার তৈরি করতে দেয়। আপনার উদাহরণ বিবেচনা:

#A_data = np.zeros((1,30))
#A_labels = np.zeros((1,30))
#B_labels =np.zeros((1,30))

A1 = layers.Input(shape=(30,), name='A_input')
A2 = layers.Dense(8, activation='???')(A1)
A3 = layers.Dense(30, activation='???', name='A_output')(A2)


B2 = layers.Dense(40, activation='???')(A2)
B3 = layers.Dense(30, activation='???', name='B_output')(B2)

## define A
A = models.Model(inputs=A1, outputs=A3)

## define B
B = models.Model(inputs=A1, outputs=B3) 

B.compile(optimizer='??',
          loss={'B_output': '??'}
          )

B.fit({'A_input': A_data},
  {'B_output': B_labels},
  epochs=??, batch_size=??)

সেজন্যই এটা! আপনি ফলাফলটি দেখতে পাবেন B.summary():

Layer (type)                 Output Shape              Param    
A_input (InputLayer)         (None, 30)                0         
_________________________________________________________________
dense_8 (Dense)              (None, 8)                 248     
______________________________________________________________
dense_9 (Dense)              (None, 40)                360       
_________________________________________________________________
B_output (Dense)             (None, 30)                1230      

উত্তরের জন্য ধন্যবাদ, তবে আমি মনে করি না যে উপরের কোডটি কাজ করবে। প্রথমে, যখন আপনি বি = মডেলগুলি বলেন। মডেল (ইনপুটস = ​​এ 2, আউটপুটস = ​​বি 3) এটি আপনাকে একটি ত্রুটি দেবে টাইপ এয়ারার: ​​ইনপুট স্তরগুলি Modelঅবশ্যই InputLayerঅবজেক্ট হতে হবে । প্রাপ্ত ইনপুট: টেনসর। এছাড়াও, যেমন পূর্বে উল্লিখিত হয়েছে, আমি আলাদাভাবে মডেল এ এবং মডেল বি তৈরি করতে ফাংশনাল এপিআই ব্যবহার করেছি। আমি মনে করি যে উত্তরটি আমি সন্ধান করছি তা কেরাস ডকুমেন্টেশনের "মাল্টি-ইনপুট এবং মাল্টি-আউটপুট মডেল" বিভাগের সাথে থাকতে পারে যা কনটেনেটেট ফাংশন ব্যবহার করে (যদিও পুরো নিশ্চিত নয়)।
আরকেজেড

@ আরকেজেড: আমি উত্তরটি সম্পাদনা করেছি। এটা এখন কাজ করে. আমাদের "কনকেনেটেট" ব্যবহার করতে হবে। আসলে আপনি যখন "বি" মডেলটি সংজ্ঞায়িত করতে চান তখন আপনার প্রধান ইনপুট (এ 1) উল্লেখ করা উচিত mention
মোঃ

আপনার সময় এবং সম্পাদনার জন্য ধন্যবাদ। আমি কেরাস ডকুমেন্টেশন থেকে উত্তরটি বের করেছি (নীচের উত্তরটি দেখুন)। আমার প্রশ্নের জন্য আমার কনটেনেটের প্রয়োজন হয়নি।
কেজেড

@ আর কেজেড: চূড়ান্ত সম্পাদনাটি দেখুন, আমি কীভাবে মডেলটি সংকলন করতে এবং ফিট করতে পারি তাও দেখাই।
মোঃ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.