اذهب إلى المحتوى
  • 0

الحصول على خرج كل طبقة في النموذج في keras

Meezo ML

السؤال

قمت ببناء النموذج التالي في كيراس لكن أريد الحصول على خرج كل طبقة، كيف يمكنني القيام بذلك؟

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))

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

هذا أمر مهم في بعض الحالات عندما نستخدم الطبقات التلاففية، يمكنك القيام بذلك في كيراس من خلال 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

الحصول على الخرج الخاص بكل طبقة في النموذج مهم لمتابعة حالة التعلم في كل مرحلة، ولحسن الحظ فان تلك المتابعة ليست صعبة في 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 في غير ذلك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...