Meezo ML نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 قمت ببناء النموذج التالي في كيراس لكن أريد الحصول على خرج كل طبقة، كيف يمكنني القيام بذلك؟ model = Sequential() model.add(Convolution2D(16, (3,3), kernel_size[1],border_mode='valid', input_shape=input_shape)) model.add(Activation('tanh')) model.add(Convolution2D(16, (3,3), kernel_size[1])) model.add(Activation('tanh')) model.add(MaxPooling2D(pool_size=pool_size)) model.add(Convolution2D(32, (3,3), kernel_size[1])) model.add(Activation('tanh')) model.add(Convolution2D(32, (3,3), kernel_size[1])) model.add(Activation('tanh')) model.add(MaxPooling2D(pool_size=pool_size)) model.add(Flatten()) model.add(Dense(4096)) model.add(Activation('tanh')) model.add(Dropout(0.4)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc']) model.fit(x, y, batch_size=batch_size, nb_epoch=20, validation_data=(data, label)) اقتباس
1 Ali Haidar Ahmad نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 هذا أمر مهم في بعض الحالات عندما نستخدم الطبقات التلاففية، يمكنك القيام بذلك في كيراس من خلال model.layers[index].output حيث أنها تقوم بإعطاء خرج أي طبقة من خلال تمرير رقم الطبقة أي ال index الخاص بها. ومن خلالها يمكنك الحصول على طلبك وهو خرج كل طبقة كالتالي: from keras import backend as K #placeholder إدخال ال in = model.input # مخرجات كل الطبقات outputs = [layer.output for layer in model.layers] # تابع التقييم functor = K.function([in , K.learning_phase()], outputs ) # الاختبار test = np.random.random(input_shape)[np.newaxis,...] layer_outs = functor([test, 1.]) print layer_outs ولمحاكاة عملية التسرب (أقصد التنعيم وتحديداً ال Dropout هنا)، استخدم learning_phase كـ 1. في layer_outs وإلا استخدم 0. حيث أننا نحتاجها في حال احتوى النموذج على طبقة Dropout أو batchnorm كما تعلم. 1 اقتباس
1 Ahmed Sharshar نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 الحصول على الخرج الخاص بكل طبقة في النموذج مهم لمتابعة حالة التعلم في كل مرحلة، ولحسن الحظ فان تلك المتابعة ليست صعبة في keras ، حيث يمكن استخدام model.layers[index].output فقط تمرر ال index الخاص بالطبقة التي تريد الحصول على الخرج الخاص بها، فمثلا الطبقة الاولي هي رقم 0 والثانية 1 وهكذا، الكود بسيط للغاية وهو كالتالي: from keras import backend as K inp = model.input # الطبقة التي يدخل منها البيانات outputs = [layer.output for layer in model.layers] # الخارج من كل الطبقات functor = K.function([inp, K.learning_phase()], outputs ) # الدالة التي تعطينا الخرج بدلالة الطبقة التي تدخل منها البيانات والتي نريد الخرج منها # نجرب اخراج طبقة من الطبقات test = np.random.random(input_shape)[np.newaxis,...] #اختيار طبقة بشكل عشوائي layer_outs = functor([test, 1.]) print (layer_outs) #طباعة الخرج مثال أخر اكثر وضوحا: from keras import backend as K # with a Sequential model # الحصول على مخرجات الطبقة الثالثة بدلالة المدخلات من الطبقة الاولي get_3rd_layer_output = K.function([model.layers[0].input], [model.layers[3].output]) layer_output = get_3rd_layer_output([x])[0] اما بالنسبة للطبقات التي لا يتم فيها التعلم او تعديل اي قيم فيها (لا يحدث فيها تعديل لل parameters مثل طبقة ال dropout او ال regularization ، فاننا نستخدم learning_phase =1 في layer_outs، او استخدم learning_phase =0 في غير ذلك. اقتباس
السؤال
Meezo ML
قمت ببناء النموذج التالي في كيراس لكن أريد الحصول على خرج كل طبقة، كيف يمكنني القيام بذلك؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.