Keras実戦--顔表情認識(一)モデルの構築と訓練


完全なコードはアップロードされており、リンクをクリックしてダウンロードできます.
https://download.csdn.net/download/pmj110119/11293264
数日後にモデルを更新して訓練した後、どのようにモデルを呼び出して使用しますか.
7月7日更新
https://blog.csdn.net/pmj110119/article/details/94991244
モデルの呼び出しと使用
フレーム全体:
classクラスを構築し、サブ関数でモデルのbuild、train、saveを実現し、一歩一歩前進する.
class Model:
    def __init__(self):
        #        model
        self.model = None
    def build_model(self):
        #      
    def train_model(self):
        #    
    def save_model(self):
        #        
一、build_Model-ネットワーク構造の構築
Sequential構造を使用して、各層addを順番に入れればよい
(kerasのSequential()はとても簡単で使いやすいので、コードを直接見て、その名の通りわかります)
二、train_Model()-データセットの前処理、モデルの訓練
まず,Kerasのピクチャジェネレータ(ImageDataGenerator)を用いてデータの前処理とピクチャの抽出を完了する.訓練時、ジェネレータは自動的かつ無限に与えられた経路から画像を抽出し、batchの画像データを生成し、ネットワークに入力して訓練する.所定のepoch回数に達するまで.
(ジェネレータImageDataGeneratorの具体的な使い方は中国語ドキュメントで詳しく紹介されています)
データプリプロセッシング
1).訓練セットの画像に対してデータ増強を行う
        train_datagen = ImageDataGenerator(
        rescale = 1./255,   #     ,    1.0/255(   )
        shear_range = 0.2,  #    (            )
        zoom_range = 0.2,   #       
            #        
        horizontal_flip=True)
2).検証セット,テストセットのピクチャを正規化する
        val_datagen = ImageDataGenerator(
                rescale = 1./255)
        eval_datagen = ImageDataGenerator(
                rescale = 1./255)
この時点では、データセット内のピクチャを本格的に処理していません.3つのインスタンスオブジェクトが生成されているだけです. train_datagen、val_datagen、eval_Datagenは,それらの属性に抽出画像を記録した後,まずデータに対してどのようなことをする必要があるかを示す.
データセット画像の抽出
ジェネレータオブジェクトの flow_from_directory(directory) で行ないます.derectoryパラメータはデータセットに格納されたパスであり、すべてのピクチャはカテゴリ別に異なるサブファイルに配置されます.例えば、第1のクラスのピクチャは‘0’フォルダに格納され、第2のクラスのピクチャは‘1’フォルダに格納され、これをカテゴリラベルとする.
データセットの特徴に基づいて、いくつかの設定を行います.以下はトレーニングセット画像の抽出です
        train_generator = train_datagen.flow_from_directory(
                root_path+'/train', #dictory  ,                      ,    batch  
                target_size=(img_size,img_size), #    resize    
                color_mode='grayscale',     #    ,graycsale rgb(  rgb)
                batch_size=batch_siz,       #batch     ,   32
                class_mode='categorical')   #       ,   ‘category’,  2D      
検証セットとテストセットは同じ方法で設定され、インスタンスオブジェクトはそれぞれ val_datagen、eval_datagen.
訓練を始める
Sequentialを呼び出す fit_generator() で行ないます.ここでは,以前に構成したピクチャジェネレータを用いた.
        history_fit=self.model.fit_generator(
                train_generator,    #generator  ,         
                steps_per_epoch=800/(batch_siz/32),#28709                 epoch  ,     epoch
                nb_epoch=nb_epoch,              #      
                validation_data=val_generator,  #         
                validation_steps=2000,          #             
                #callbacks=[early_stopping]
                )
反復回数がepochに達するとモデルが訓練され,次に予測セットのピクチャを予測する.
history_predict=self.model.predict_generator(
                eval_generator,
                steps=2000)
これで、モデルトレーニング完了
三、save_モデル-モデル保存
この一歩は何も言うことはない.
    def save_model(self):
        model_json=self.model.to_json()
        with open(root_path+"/model_json.json", "w") as json_file:
            json_file.write(model_json)
        self.model.save_weights(root_path+'/model_weight.h5')
        self.model.save(root_path+'/model.h5')
        print('model saved')
四、主関数呼び出し
順序よく実行する buidl、train、save すぐ
if __name__=='__main__':
    model=Model()
    model.build_model()
    print('model built')
    model.train_model()
    print('model trained')
    model.save_model()
    print('model saved')