2017-06-01 4 views
3

Keras Sequentialモデルを使用して、複数のクラス分類子を訓練しています。クラスラベルをKerasモデルに添付する

評価では、Kerasは信頼のベクトルを出力し、正しいクラスIDをargmaxを使用して推論することができます。次に、ルックアップテーブルを使用して実際のクラスラベル(例:文字列)を受け取ることができます。

解決策は、訓練されたモデルをロードしてから、ルックアップテーブルを別々に読み込むことです。私は多くの分類子を持っているので、両方の構造を1つのファイルに保存したいと考えています。

私が探しているのは、実際のラベル検索ベクトルをKerasモデルに統合する方法です。そうすれば、入力データを取ってそのデータの正しいクラスラベルを返すことができる1つのクラシファイアファイルを持つことができます。

これを解決する1つの方法は、モデルとルックアップテーブルの両方をタプルに格納し、そのタプルをピクルスに書き込むことですが、これはあまりエレガントではありません。

答えて

5

私は自分自身で解決策を試しましたが、これはうまくいくようです。私はもっ​​と簡単なことを望んでいた。

モデルファイルをもう一度開くと、実際には最適ではありません。誰かがうまくいくことができれば、是非、してください。

import h5py 

from keras.models import load_model 
from keras.models import save_model 


def load_model_ext(filepath, custom_objects=None): 
    model = load_model(filepath, custom_objects=None) 
    f = h5py.File(filepath, mode='r') 
    meta_data = None 
    if 'my_meta_data' in f.attrs: 
     meta_data = f.attrs.get('my_meta_data') 
    f.close() 
    return model, meta_data 


def save_model_ext(model, filepath, overwrite=True, meta_data=None): 
    save_model(model, filepath, overwrite) 
    if meta_data is not None: 
     f = h5py.File(filepath, mode='a') 
     f.attrs['my_meta_data'] = meta_data 
     f.close() 
+0

代替手段が不足しているという回答を受け入れます。もし誰かがより良い解決策を考え出すなら、私はそれらを受け入れます。 – Cerno

+1

同じ問題を解決しようとしています。あなたの解決策は私にとってはうまくいかない: '' 'save_model_ext(mod1、filepath = 'test_model.h5'、meta_data = {0: 'c1'、1: 'c2'})' '' は、エラー: '' ' TypeError:オブジェクトdtype dtype( 'O')には、対応するネイティブHDF5はありません ' '' 'meta_data'にはどのような型がありますか? – slymore

+0

こんにちは。 HDF5に変換できるデータを使用する必要があります。 dtype = "O"は、あなたのデータに明らかに有効でないPythonオブジェクトが含まれていることを意味します。私が思い出したように、私はPython辞書を問題なく使用しました。それは本当にあなたが試したコードですか、それとも本当ですか? – Cerno

関連する問題