рдореИрдВ рд╕реА + + рдореЗрдВ рдХреИрд╕рд░ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рд╣реБрдЖ

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ рджреЗрд╢реА C++ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд Kesas рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ Kesas рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рддрд╛рдЬреНрдЬреБрдм рд╣реИ, рд╕рдорд╛рдзрд╛рди рдмрд┐рд▓реНрдХреБрд▓ рддреБрдЪреНрдЫ рдирд╣реАрдВ рдерд╛ред рдирддреАрдЬрддрди, рдПрдХ рдирд┐рдЬреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдерд╛, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреИрд╕рд╛ рд╣реИ - рд╕реНрд╡рдЪреНрдЫ рдХреНрд░реЙрд╕ рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЖрдЬ рдХрд╛ рд▓рдШреБ рд▓реЗрдЦ рд╣реЛрдЧрд╛ред


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣рд╛рдБ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИред рдЦреИрд░, рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╣рд░ рдХрд┐рд╕реА рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ ...


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рдиред


рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ C++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (Unreal Engune 4) рдореЗрдВ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рджреБрд░реНрднрд╛рдЧреНрдп рд╣реИ: рдЖрдЬ рд╕реА + + рдореЗрдВ рдХреЗрд░рд╕ рдореЙрдбрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред


C++ рдХрд╛ Python рдХреЙрд▓ рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗрд░рд╕ рдореЙрдбрд▓ рдХреЛ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рдФрд░ рдлрд┐рд░ рдХреНрд░реЙрд╕ рдХреЗ рд▓рд┐рдП рдЯреЗрдиреНрд╕реЛрдлреНрд▓реЛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рд╕реА ++ рдХреЛрдб рд╕реЗ рдЯреАрдПрдл рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдерд╛ред


рдХрд╛рдпрд╛рдкрд▓рдЯ рдХреА рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдореБрд╢реНрдХрд┐рд▓реЗрдВ рднреА рдкреИрджрд╛ рд╣реЛрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ , TensorFlow Bzzel рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдмреЗрдЬреЗрд▓ рдЦреБрдж рдПрдХ рд╕рдирдХреА рдЪреАрдЬ рд╣реИ рдФрд░ UE4 рдХреЗ рддрд╣рдд рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рджреВрд╕рд░реА рдмрд╛рдд , TF рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдФрд░ рднрд╛рд░реА рдЪреАрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рд╣рд▓реНрдХрд╛ рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрд┐рдердм рдХреЗ рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рдЖрдзрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд┐рд▓рд╛ рдерд╛, рдЬрд┐рд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬрд╝рд░реВрд░рдд рдереАред рд▓реЗрдХрд┐рди, рдЙрдиреНрд╣реЛрдВрдиреЗ Python рдФрд░ Keras рдХреЗ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдФрд░ рдЗрд╕реЗ рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣рд╛: Core Dump рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ ред рдпрд╣ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рдерд╛ ...


рд╣рдо рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ!


рд░реЙрдХ рдХреЛ рдореЛрдбрд╝рдирд╛, рдмреЛрддрд▓ рдлреЗрдВрдХрдирд╛ pivasom рдКрд░реНрдЬрд╛, рдореИрдВ рдХреЛрдб рдкрд░ рдмреИрда рдЧрдпрд╛ред TensorFlow рдХреЛрдб, рдХреЛрдб рдкрд░ рдкрд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬреНрдЮрд╛рди (рдЗрд╕рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП ITMO) рдФрд░ рдореЗрд░реЗ рдХрд╛рдиреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╕рдВрдЧреАрдд рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХреАред рдХрд┐рд╕реА рддрд░рд╣ рдПрдХ рд░рд╛рдд рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред


рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд┐рд▓рддреЗ рд╣реИрдВ: Keras2cpp!


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЛ рдЕрдкрдиреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рд╣реИред


рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл Keras рдореЙрдбрд▓ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: рдкрд╣рд▓реЗ , рдлрд┐рд░ , рдлрд┐рд░ float рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ ред


рдЕрдм рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ - C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ 2 рдЗрдХрд╛рдЗрдпрд╛рдБ tensor рдФрд░ model ред


Tensor - рд╡рд╣ рдбреЗрдЯрд╛ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЯреИрдВрд╕рд░ рдХрд╛ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ 4 рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЖрдпрд╛рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдо рдХреЗ рдЖрдпрд╛рдо рдХреЛ std::vector<int> dims_; рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ std::vector<int> dims_; рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдВрд╕рд░ рддрддреНрд╡ рдХрд╛ рд╡рдЬрди std::vector<int> data_; ред рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ, void Print() рдФрд░ Tensor Select(int row) рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдВрдЪрд╛рд▓рди рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рджрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдореЙрдбрд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред


рдореЙрдбрд▓ - рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкрд░рддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдирд░реНрд╕ рдФрд░ рдПрдХ рд╡рдЬрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ virtual bool LoadModel(const std::string& filename); рд▓рд┐рдП 2 рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ virtual bool LoadModel(const std::string& filename); рдФрд░ virtual bool Apply(Tensor* in, Tensor* out); ред


рдпрд╣рд╛рдБ рдПрдХ рдкреВрд░реНрдг рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИред


python_model.py:


 import numpy as np from keras import Sequential from keras.layers import Dense #create random data test_x = np.random.rand(10, 10).astype('f') test_y = np.random.rand(10).astype('f') model = Sequential([ Dense(1, input_dim=10) ]) model.compile(loss='mse', optimizer='adam') #train model by 1 iteration model.fit(test_x, test_y, epochs=1, verbose=False) #predict data = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) prediction = model.predict(data) print(prediction) #save model from keras2cpp import export_model export_model(model, 'example.model') 

cpp_mpdel.cc:


 #include "keras_model.h" int main() { // Initialize model. KerasModel model; model.LoadModel("example.model"); // Create a 1D Tensor on length 10 for input data. Tensor in(10); in.data_ = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}; // Run prediction. Tensor out; model.Apply(&in, &out); out.Print(); return 0; } 

рдпрд╣реА рд╕рдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рд╕реА # рдФрд░ рдкрд╛рдпрдерди рдХреЛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЖрдЧреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ред


рдкреБрдирд╢реНрдЪ


рдореБрдЭреЗ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдерд╛ред рдЬрдм рдЖрдк рдЦреБрдж рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдзрд┐рдХ рд╕рдордЭрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд╣рдо рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЬреАрдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ ...


рдЧрд┐рддреБрдм рднрдВрдбрд╛рд░
рд╕реНрд░реЛрдд

Source: https://habr.com/ru/post/hi438398/


All Articles