أهلا بكم،
أريد استخدام Keras لتدريب نموذج CNN على التصنيف. كما أعلم ، هناك العديد من نماذج CNN العامة المدربة مسبقًا ، مثل VGG و ImageNet وما إلى ذلك. ولكن لسوء الحظ ، يتم إنشاء هذه النماذج المدربة مسبقًا مع إطار عمل CNN آخر ، مثل caffe أو cuda-convnet. كيف يمكننا استخدام هذه الأنواع من النماذج أو الأوزان المدربة مسبقًا لتهيئة نموذج تسلسلي Keras ثم القيام بالتدريب الدقيق؟
شكرا
دكتور وو
آمل أيضًا أن أرى برنامجًا تعليميًا لتوضيح ذلك.
نحن نعمل عليه. هذا بالتأكيد من بين الميزات التي نريد إضافتها قريبًا. https://github.com/fchollet/keras/issues/100
إذا كان أي شخص لا يزال مهتمًا ، فيمكنك استخدام مفترق Keras الذي يحتوي على وحدة تحويل:
https://github.com/MarcBS/keras
الأفضل،
مارك
مرحبا،
كنت أحاول caffe2keras وحدة التحويل التي ذكرتها ولكني أتلقى هذا الخطأ عندما أقوم بتشغيل caffe2keras.py
لم يتم تعريف الاسم العالمي "network_input"
أي مساعدة؟
dhruvjain إذا كنت تشير إلى هذه الشوكة ، فافتح مشكلة جديدة هنا ، من فضلك.
علاوة على ذلك ، سيكون من المفيد جدًا تضمين ملفات النموذج التي تحاول تحويلها ، أو على الأقل ملف .prototxt.
لقد استخدمته لتحويل نموذج caffenet ، فإن prototxt هو هذا:
الاسم: "CaffeNet"
Force_backward: صحيح
ادخال البيانات"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
الإدخال: "التسمية"
input_dim: 1
input_dim: 1
input_dim: 1
input_dim: 1
طبقة {
الاسم: "conv1"
اكتب: "التفاف"
أسفل: "البيانات"
أعلى: "conv1"
Convolution_param {
عدد_ الخرج: 96
kernel_size: 11
الخطوة: 4
}
}
طبقة {
الاسم: "relu1"
اكتب: "ReLU"
أسفل: "conv1"
أعلى: "conv1"
}
طبقة {
الاسم: "pool1"
اكتب: "تجميع"
أسفل: "conv1"
أعلى: "pool1"
pooling_param {
البركة: MAX
kernel_size: 3
الخطوة: 2
}
}
طبقة {
الاسم: "norm1"
اكتب: "LRN"
أسفل: "pool1"
أعلى: "norm1"
lrn_param {
local_size: 5
ألفا: 0.0001
بيتا: 0.75
}
}
طبقة {
الاسم: "conv2"
اكتب: "التفاف"
أسفل: "norm1"
أعلى: "conv2"
Convolution_param {
عدد_الخارج: 256
الوسادة: 2
kernel_size: 5
المجموعة 2
}
}
طبقة {
الاسم: "relu2"
اكتب: "ReLU"
أسفل: "conv2"
أعلى: "conv2"
}
طبقة {
الاسم: "pool2"
اكتب: "تجميع"
أسفل: "conv2"
أعلى: "pool2"
pooling_param {
البركة: MAX
kernel_size: 3
الخطوة: 2
}
}
طبقة {
الاسم: "norm2"
اكتب: "LRN"
أسفل: "pool2"
أعلى: "norm2"
lrn_param {
local_size: 5
ألفا: 0.0001
بيتا: 0.75
}
}
طبقة {
الاسم: "conv3"
اكتب: "التفاف"
أسفل: "norm2"
أعلى: "conv3"
Convolution_param {
عدد_الخارج: 384
الوسادة: 1
kernel_size: 3
}
}
طبقة {
الاسم: "relu3"
اكتب: "ReLU"
أسفل: "conv3"
أعلى: "conv3"
}
طبقة {
الاسم: "conv4"
اكتب: "التفاف"
أسفل: "conv3"
أعلى: "conv4"
Convolution_param {
عدد_الخارج: 384
الوسادة: 1
kernel_size: 3
المجموعة 2
}
}
طبقة {
الاسم: "relu4"
اكتب: "ReLU"
أسفل: "conv4"
أعلى: "conv4"
}
طبقة {
الاسم: "conv5"
اكتب: "التفاف"
أسفل: "conv4"
أعلى: "conv5"
Convolution_param {
عدد_الخارج: 256
الوسادة: 1
kernel_size: 3
المجموعة 2
}
}
طبقة {
الاسم: "relu5"
اكتب: "ReLU"
أسفل: "conv5"
أعلى: "conv5"
}
طبقة {
الاسم: "pool5"
اكتب: "تجميع"
أسفل: "conv5"
أعلى: "pool5"
pooling_param {
البركة: MAX
kernel_size: 3
الخطوة: 2
}
}
طبقة {
الاسم: "fc6"
اكتب: "InnerProduct"
أسفل: "pool5"
أعلى: "fc6"
معلمة_منتج_داخلية {
عدد_الخارج: 4096
}
}
طبقة {
الاسم: "relu6"
اكتب: "ReLU"
أسفل: "fc6"
أعلى: "fc6"
}
طبقة {
الاسم: "drop6"
اكتب: "Dropout"
أسفل: "fc6"
أعلى: "fc6"
dropout_param {
نسبة التسرب: 0.5
}
}
طبقة {
الاسم: "fc7"
اكتب: "InnerProduct"
أسفل: "fc6"
أعلى: "fc7"
معلمة_منتج_داخلية {
عدد_الخارج: 4096
}
}
طبقة {
الاسم: "relu7"
اكتب: "ReLU"
أسفل: "fc7"
أعلى: "fc7"
}
طبقة {
الاسم: "drop7"
اكتب: "Dropout"
أسفل: "fc7"
أعلى: "fc7"
dropout_param {
نسبة التسرب: 0.5
}
}
طبقة {
الاسم: "fc8"
اكتب: "InnerProduct"
أسفل: "fc7"
أعلى: "fc8"
معلمة_منتج_داخلية {
عدد_الخارج: 1000
}
}
حقا ميزة مهمة ...
محول الوزن Caffe-to-Keras هو ما تبحث عنه:
https://github.com/pierluigiferrari/caffe_weight_converter
يقوم بتحويل ملفات .caffemodel
إلى ملفات وزن .h5
. إنه يحول الأوزان فقط ، وليس تعريف النموذج ، ولكن الأوزان هي حقًا كل ما تحتاجه على أي حال.
بالنسبة لأي نموذج معين ، يتطلب تعريف النموذج إما طبقات مكتبة Keras الأساسية فقط ، وفي هذه الحالة يكون من السهل جدًا الكتابة في Keras يدويًا ، أو أن تعريف النموذج معقد وله أنواع طبقات مخصصة ، وفي هذه الحالة ربما يفشل محول تعريف النموذج على أي حال.
ما هو الشكل الذي يتوقع إدخاله من خلال نموذج keras الجديد المحول؟ (3،224،224) أم (224،224،3)؟ لأن كافيه يعمل بـ (3224.224) وكيراس بـ (224.224.3) ...
التعليق الأكثر فائدة
نحن نعمل عليه. هذا بالتأكيد من بين الميزات التي نريد إضافتها قريبًا. https://github.com/fchollet/keras/issues/100