C++에서 Keras 모델을 쉽게 사용하세요
Keras/Python을 사용하여 모델을 구축/학습하시겠습니까? 그리고 애플리케이션을 TensorFlow에 연결하지 않고 C++에서 모델에 대한 예측(정방향 전달)을 실행하고 싶으신가요? 그렇다면 검소한 깊이가 바로 당신을 위한 것입니다.
알뜰하게
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
은 TensorFlow 백엔드를 사용할 때 기본값인 channels_last
여야 합니다. 다른 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
이 테스트를 실행하여 frugally-deep의 정방향 패스 결과가 Keras의 결과와 동일한지 확인합니다.
더 많은 통합 예시를 보려면 FAQ를 살펴보세요.
알뜰하게 설치하는 다양한 방법에 대한 가이드는 INSTALL.md
에서 찾을 수 있습니다.
FAQ.md
참조하세요.
이 라이브러리의 API는 앞으로도 계속 변경될 수 있습니다. 제안 사항이 있거나, 오류를 발견하거나, 일반적인 피드백/비판을 제공하려는 경우 언제든지 귀하의 의견을 듣고 싶습니다. 물론 기여도 매우 환영합니다.
MIT 라이센스에 따라 배포됩니다. (동봉된 파일 LICENSE
또는 https://opensource.org/licenses/MIT 참조)