استخدم نماذج Keras في C++ بكل سهولة
هل ترغب في بناء/تدريب نموذج باستخدام Keras/Python؟ وهل ترغب في تشغيل التنبؤ (التمرير الأمامي) على النموذج الخاص بك في C++ دون ربط تطبيقك بـ TensorFlow؟ إذًا فإن العمق المقتصد هو ما يناسبك تمامًا.
عميق بشكل مقتصد
model.predict
) ليس فقط للنماذج المتسلسلة ولكن أيضًا للرسوم البيانية الحسابية ذات الهيكل الأكثر تعقيدًا، والتي تم إنشاؤها باستخدام واجهة برمجة التطبيقات الوظيفية.Add
، Concatenate
، Subtract
، Multiply
، Average
، Maximum
، Minimum
، Dot
AveragePooling1D/2D/3D
، GlobalAveragePooling1D/2D/3D
TimeDistributed
Conv1D/2D
، SeparableConv2D
، DepthwiseConv2D
Cropping1D/2D/3D
، ZeroPadding1D/2D/3D
، CenterCrop
BatchNormalization
، Dense
، Flatten
، Normalization
Dropout
، AlphaDropout
، GaussianDropout
، GaussianNoise
SpatialDropout1D
، SpatialDropout2D
، SpatialDropout3D
ActivityRegularization
، LayerNormalization
، UnitNormalization
RandomContrast
، RandomFlip
، RandomHeight
RandomRotation
، RandomTranslation
، RandomWidth
، RandomZoom
MaxPooling1D/2D/3D
، GlobalMaxPooling1D/2D/3D
ELU
، LeakyReLU
، ReLU
، SeLU
، PReLU
Sigmoid
، Softmax
، Softplus
، Tanh
Exponential
GELU
Softsign
Rescaling
UpSampling1D/2D
، Resizing
Reshape
، Permute
، RepeatVector
Embedding
، CategoryEncoding
Attention
، AdditiveAttention
، MultiHeadAttention
load_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)