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 をご覧ください。
frugally-deep をインストールするさまざまな方法のガイドは、 INSTALL.md
にあります。
FAQ.md
参照してください。
このライブラリの API は将来的に変更される可能性があります。ご提案がある場合、間違いを見つけた場合、または一般的なフィードバック/批判をお寄せになりたい場合は、ぜひご連絡ください。もちろん、投稿も大歓迎です。
MIT ライセンスに基づいて配布されます。 (添付ファイルLICENSE
または https://opensource.org/licenses/MIT を参照してください)