

うさぎとカメの判別AIの開発をしています。  
しかし、なぜか学習がうまくいかず、lossやacc（判別成功率）の値が良くなりません。  
通常、lossとaccは反比例で片方の数値が増加すればもう片方が減少するはずなのに、lossが膨大に増加してaccは0.5あたりで変化しません。  
これはニューラルネットワークの設計がいけないのでしょうか？？  
以下に、スペックとソースコードと結果画面を載せます。

仕様スペック  
・windows10  
・Docker  
・Python3.7.3

[code]

    import sys
    import os
    import numpy as np
    import pandas as pd
    import gc
    from keras.models import Sequential
    from keras.layers import Convolution2D, MaxPooling2D
    from keras.layers import Activation, Dropout, Flatten, Dense
    from keras.utils import np_utils
    
    class TrainModel : 
      def __init__(self):
        input_dir = './Gazo'
        self.nb_classes = len([name for name in os.listdir(input_dir) if name != ".DS_Store"])
        x_train, x_test, y_train, y_test = np.load("./Gakushu.npy")
        # データを正規化する
        self.x_train = x_train.astype("float") / 256
        self.x_test = x_test.astype("float") / 256
        self.y_train = np_utils.to_categorical(y_train, self.nb_classes)
        self.y_test = np_utils.to_categorical(y_test, self.nb_classes)
      def train(self, input=None) :
        model = Sequential()
        # K=32, M=3, H=3
        if input == None :
          model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=self.x_train.shape[1:]))
        else :
          model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=input))
        # K=64, M=3, H=3（調整）
        model.add(Activation('relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
        model.add(Dropout(0.25))
        model.add(Convolution2D(64, 3, 3, border_mode='same'))
        model.add(Activation('relu'))
        # K=64, M=3, H=3（調整）
        model.add(Convolution2D(64, 3, 3))
        model.add(MaxPooling2D(pool_size=(2, 2)))
        model.add(Dropout(0.25))
        model.add(Flatten()) 
        model.add(Dense(512))
        # biases  nb_classes
        model.add(Activation('relu'))
        model.add(Dropout(0.5))
        model.add(Dense(self.nb_classes))
        model.add(Activation('softmax'))
        model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
        if input == None :
          # 学習してモデルを保存
          model.fit(self.x_train, self.y_train, batch_size=32, nb_epoch=int(kaisu), validation_data=(self.x_test,self.y_test))
          hdf5_file = "./AImodel.hdf5"
          model.save_weights(hdf5_file)
          score = model.evaluate(self.x_test, self.y_test, verbose = 0)
          print('-----------------------------------------------------------------------------')
          print("")
          print("トレーニング終了！")
          print("")
          print('loss=', score[0])
          print('判別成功率=', score[1])
          print("")
        return model
    if __name__ == "__main__":
      args = sys.argv
      train = TrainModel()
      train.train()
      gc.collect()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/tW9kn.png)](https://i.stack.imgur.com/tW9kn.png)

参考ページ：<https://qiita.com/tsunaki/items/608ff3cd941d82cd656b>


CC BY-SA 4.0
2020-04-23T15:03:01.907
65900
2020-05-13T08:06:02.770
2020-04-23T15:15:54.763
37702
37702
question
python docker 機械学習 深層学習
画像判別AIモデルのloss率とacc率を良くしたい


Epochの2以降は学習できていない状態ですね。  
168枚というデータ枚数に対して、モデル構造が複雑すぎるためだと推察します。  
data
augmentationによって訓練データの枚数を増やすか、もしくは畳み込み層やプーリング層におけるフィルタの大きさや枚数を減らすのが良いと思います。  
また、乱数値の設定状態によって訓練する度に結果が変わってしまうので、予め設定しておくと良いと思います。


CC BY-SA 4.0
2020-05-13T08:06:02.770
66565
2020-05-13T08:06:02.770
30009
65900
answer