ใช้โมเดล Keras ใน C ++ ได้อย่างง่ายดาย
คุณต้องการสร้าง/ฝึกโมเดลโดยใช้ Keras/Python หรือไม่? และคุณต้องการเรียกใช้การทำนาย (ส่งต่อ) กับโมเดลของคุณใน C ++ โดยไม่ต้องเชื่อมโยงแอปพลิเคชันของคุณกับ TensorFlow หรือไม่ ถ้าอย่างนั้นความลึกที่ตระการตาก็เหมาะกับคุณอย่างแน่นอน
ประหยัดลึก
model.predict ) ไม่เพียงแต่สำหรับโมเดลตามลำดับเท่านั้น แต่ยังรวมถึงกราฟการคำนวณที่มีโทโพโลยีที่ซับซ้อนมากขึ้น ซึ่งสร้างขึ้นด้วย API การทำงาน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 ของไลบรารีนี้อาจมีการเปลี่ยนแปลงในอนาคต หากคุณมีข้อเสนอแนะ ค้นหาข้อผิดพลาด หรือต้องการแสดงความคิดเห็น/คำวิจารณ์ทั่วไป ฉันยินดีรับฟังจากคุณ แน่นอนว่าเรายินดีเป็นอย่างยิ่งที่จะมีส่วนร่วม
เผยแพร่ภายใต้ใบอนุญาต MIT (ดูไฟล์ LICENSE ที่แนบมาหรือที่ https://opensource.org/licenses/MIT)