استخدم نماذج Keras في C++ بكل سهولة
هل ترغب في بناء/تدريب نموذج باستخدام Keras/Python؟ وهل ترغب في تشغيل التنبؤ (التمرير الأمامي) على النموذج الخاص بك في C++ دون ربط تطبيقك بـ TensorFlow؟ إذًا فإن العمق المقتصد هو ما يناسبك تمامًا.
عميق بشكل مقتصد
model.predict ) ليس فقط للنماذج المتسلسلة ولكن أيضًا للرسوم البيانية الحسابية ذات الهيكل الأكثر تعقيدًا، والتي تم إنشاؤها باستخدام واجهة برمجة التطبيقات الوظيفية.Add ، Concatenate ، Subtract ، Multiply ، Average ، Maximum ، Minimum ، DotAveragePooling1D/2D/3D ، GlobalAveragePooling1D/2D/3DTimeDistributedConv1D/2D ، SeparableConv2D ، DepthwiseConv2DCropping1D/2D/3D ، ZeroPadding1D/2D/3D ، CenterCropBatchNormalization ، Dense ، Flatten ، NormalizationDropout ، AlphaDropout ، GaussianDropout ، GaussianNoiseSpatialDropout1D ، SpatialDropout2D ، SpatialDropout3DActivityRegularization ، LayerNormalization ، UnitNormalizationRandomContrast ، RandomFlip ، RandomHeightRandomRotation ، RandomTranslation ، RandomWidth ، RandomZoomMaxPooling1D/2D/3D ، GlobalMaxPooling1D/2D/3DELU ، LeakyReLU ، ReLU ، SeLU ، PReLUSigmoid ، Softmax ، Softplus ، TanhExponential GELU Softsign RescalingUpSampling1D/2D ، ResizingReshape ، Permute ، RepeatVectorEmbedding ، CategoryEncodingAttention ، AdditiveAttention ، MultiHeadAttentionload_model ) Conv2DTranspose (لماذا)، Lambda (لماذا)، Conv3D ، ConvLSTM1D ، ConvLSTM2D ، Discretization ، GRUCell ، Hashing ، IntegerLookup ، LocallyConnected1D ، LocallyConnected2D ، LSTMCell ، Masking ، RepeatVector ، RNN ، SimpleRNN ، SimpleRNNCell ، StackedRNNCells ، StringLookup ، TextVectorization ، Bidirectional ، GRU ، LSTM ، CuDNNGRU ، CuDNNLSTM ، ThresholdedReLU ، Upsampling3D ، النماذج temporal
استخدم Keras/Python لبناء ( model.compile(...) ) وتدريب ( model.fit(...) ) واختبار ( model.evaluate(...) ) نموذجك كالمعتاد. ثم احفظه في ملف واحد باستخدام model.save('....keras') . يجب أن يكون تنسيق image_data_format في النموذج الخاص بك هو channels_last ، وهو الإعداد الافتراضي عند استخدام الواجهة الخلفية لـ TensorFlow. النماذج التي تم إنشاؤها باستخدام image_data_format مختلف والواجهات الخلفية الأخرى غير مدعومة.
الآن قم بتحويله إلى تنسيق ملف عميق للغاية باستخدام keras_export/convert_model.py
أخيرًا قم بتحميله في C++ ( fdeep::load_model(...) ) واستخدم model.predict(...) لاستدعاء تمرير للأمام مع بياناتك.
يوضح المثال البسيط التالي سير العمل الكامل:
# create_model.py
import numpy as np
from tensorflow . keras . layers import Input , Dense
from tensorflow . keras . models import Model
inputs = Input ( shape = ( 4 ,))
x = Dense ( 5 , activation = 'relu' )( inputs )
predictions = Dense ( 3 , activation = 'softmax' )( x )
model = Model ( inputs = inputs , outputs = predictions )
model . compile ( loss = 'categorical_crossentropy' , optimizer = 'nadam' )
model . fit (
np . asarray ([[ 1 , 2 , 3 , 4 ], [ 2 , 3 , 4 , 5 ]]),
np . asarray ([[ 1 , 0 , 0 ], [ 0 , 0 , 1 ]]), epochs = 10 )
model . save ( 'keras_model.keras' )python3 keras_export/convert_model.py keras_model.keras fdeep_model.json // main.cpp
# include < fdeep/fdeep.hpp >
int main ()
{
const auto model = fdeep::load_model ( " fdeep_model.json " );
const auto result = model. predict (
{ fdeep::tensor ( fdeep::tensor_shape ( static_cast <std:: size_t >( 4 )),
std::vector< float >{ 1 , 2 , 3 , 4 })});
std::cout << fdeep::show_tensors (result) << std::endl;
} عند استخدام convert_model.py يتم إنشاء حالة اختبار (قيم الإدخال والمخرجات المقابلة) تلقائيًا وحفظها مع النموذج الخاص بك. يقوم fdeep::load_model بإجراء هذا الاختبار للتأكد من أن نتائج التمريرة الأمامية في العمق المقتصد هي نفسها كما في Keras.
لمزيد من أمثلة التكامل، يرجى إلقاء نظرة على الأسئلة الشائعة.
يمكن العثور على أدلة لطرق مختلفة للتثبيت العميق في INSTALL.md .
راجع FAQ.md
لا تزال واجهة برمجة التطبيقات (API) لهذه المكتبة قد تتغير في المستقبل. إذا كانت لديك أي اقتراحات، أو وجدت أخطاء، أو كنت ترغب في تقديم تعليقات/انتقادات عامة، فيسعدني أن أسمع منك. وبطبيعة الحال، المساهمات هي أيضا موضع ترحيب كبير.
وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. (راجع ملف LICENSE المصاحب أو على https://opensource.org/licenses/MIT)