多分,過学習かもしれませんが質問です.
上の白丸9つが微妙に動き,そこでどこで一番高い応力がでるのか検討しています.
ざっくりとですが1つの丸に対して
上下12,左右12ぐらい動けるので1つの丸で144パターン
9つのため144の9乗といった途方もないパターンがあります.
kerasを用いて画像判別を行いました
訓練データ10万
テストデータ900
で検証したのですが
Epoch 64/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.7258 - acc: 0.7475 - val_loss: 8.9855 - val_acc: 0.0000e+00
Epoch 65/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.7175 - acc: 0.7532 - val_loss: 9.0057 - val_acc: 0.0000e+00
Epoch 66/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.7196 - acc: 0.7528 - val_loss: 8.8146 - val_acc: 0.0000e+00
Epoch 67/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.7114 - acc: 0.7526 - val_loss: 8.7844 - val_acc: 0.0000e+00
Epoch 68/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.7045 - acc: 0.7560 - val_loss: 9.1766 - val_acc: 0.0000e+00
Epoch 69/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.6987 - acc: 0.7586 - val_loss: 9.0322 - val_acc: 0.0000e+00
Epoch 70/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.6981 - acc: 0.7593 - val_loss: 8.9527 - val_acc: 0.0000e+00
Epoch 71/500
80000/80000 [==============================] - 246s 3ms/step - loss: 0.6975 - acc: 0.7568 - val_loss: 8.9176 - val_acc: 0.0000e+00
Epoch 72/500
80000/80000 [==============================] - 245s 3ms/step - loss: 0.6880 - acc: 0.7599 - val_loss: 9.1155 - val_acc: 0.0000e+00
という感じで予測誤差が下がっていない状態です.これは過学習と決め付けてよいのでしょうか?
コードも下記に示してあるので原因など分かる方がいらっしゃればご教授お願いします.
引用テキスト
Python
1 2#https://qiita.com/hiroeorz@github/items/ecb39ed4042ebdc0a957 3 4from keras.models import Sequential 5from keras.layers import Activation, Dense, Dropout 6from keras.utils.np_utils import to_categorical 7from keras.optimizers import Adagrad 8from keras.optimizers import Adam 9from keras.models import load_model 10from keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger 11import numpy as np 12from PIL import Image 13import os 14import time 15import csv 16 17 18start_time = time.time() 19print("開始時刻: " + str(start_time)) 20 21# 学習用のデータを作る. 22image_list = [] 23label_list = [] 24 25#ハイパーパラメータ 26#画像サイズ 27x = 120 28y = 120 29A = x*y #入力のノード数 30#エポック数 31B = 500 32#バッチサイズ 33BATCH_SIZE = 32 34#学習率 35LR = 0.00001 36#出力ノード数 37output =9 38 39 40# ./data/train 以下のa,b,cのディレクトリ以下の画像を読み込む。 41for dir in os.listdir("data/train"): 42 if dir == ".DS_Store": 43 continue 44 45 dir1 = "data/train/" + dir 46 label = 0 47 48 if dir == "a": # 左下に最大応力:ラベル0 49 label = 0 50 elif dir == "b": # 右下に最大応力:ラベル1 51 label = 1 52 elif dir == "c": # 右下に最大応力:ラベル1 53 label = 2 54 elif dir == "d": # 右下に最大応力:ラベル1 55 label = 3 56 elif dir == "e": # 右下に最大応力:ラベル1 57 label = 4 58 elif dir == "f": # 右下に最大応力:ラベル1 59 label = 5 60 elif dir == "g": # 右下に最大応力:ラベル1 61 label = 6 62 elif dir == "h": # 右下に最大応力:ラベル1 63 label = 7 64 elif dir == "i": # 右下に最大応力:ラベル1 65 label = 8 66 67 68 for file in os.listdir(dir1): 69 if file != ".DS_Store": 70 label_list.append(label) #わからない 71 filepath = dir1 + "/" + file 72 image = np.array(Image.open(filepath).resize((x, y))) 73 print(image.shape) 74 print(filepath) 75 image =np.reshape(image, A) 76 print(image.shape) 77 print('\n') 78 image_list.append(image / 255.) 79 80 81# kerasに渡すためにnumpy配列に変換。 82image_list = np.array(image_list) 83 84 85 86 87# ラベルの配列を1と0からなるラベル配列に変更 88# 0 -> [1,0], 1 -> [0,1] という感じ。 89Y = to_categorical(label_list) #わからない 90 91print("入力データの確認") 92print(image_list.shape) 93#np.savetxt("check/input_data_pixel.csv",image_list,delimiter=",") 94#print("ラベルデータの確認") 95print(image_list.shape) 96#np.savetxt("check/label_data.csv",Y,delimiter=",") 97 98 99# モデルを生成してニューラルネットを構築 100model = Sequential() 101 102model.add(Dense(5000, input_dim=A,kernel_initializer='random_uniform',bias_initializer='zeros')) 103model.add(Activation("relu")) 104model.add(Dropout(0.5)) 105 106 107 108model.add(Dense(2000,kernel_initializer='random_uniform',bias_initializer='zeros')) 109model.add(Activation("relu")) 110model.add(Dropout(0.5)) 111 112model.add(Dense(1000,kernel_initializer='random_uniform',bias_initializer='zeros')) 113model.add(Activation("relu")) 114model.add(Dropout(0.5)) 115 116model.add(Dense(500,kernel_initializer='random_uniform',bias_initializer='zeros')) 117model.add(Activation("relu")) 118model.add(Dropout(0.5)) 119 120model.add(Dense(100,kernel_initializer='random_uniform',bias_initializer='zeros')) 121model.add(Activation("relu")) 122model.add(Dropout(0.5)) 123 124model.add(Dense(50,kernel_initializer='random_uniform',bias_initializer='zeros')) 125model.add(Activation("relu")) 126model.add(Dropout(0.5)) 127 128model.add(Dense(output)) 129model.add(Activation("softmax")) 130 131# オプティマイザ(最適化)にAdamを使用 132opt = Adam(lr=LR) 133# モデルをコンパイル 134model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) #わからない 135#CSVに各エポックの学習結果の保存 136csv_logger = CSVLogger('result/training.csv') 137# 学習を実行。20%はテストに使用。 138history = model.fit(image_list, Y, nb_epoch=B,verbose=1,callbacks=[csv_logger], batch_size=BATCH_SIZE, validation_split=0.2) 139 140 141 142# テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。 143total = 0. 144ok_count = 0. 145#最終の学習結果の表示 146loss, accuracy = model.evaluate(image_list, Y) 147print("\nloss:{} accuracy:{}".format(loss, accuracy)) 148#最終の学習結果を書き込む 149fp = open("result/RESULT.txt","w") 150fp.write("\nloss:{} accuracy:{}".format(loss, accuracy)) 151fp.close() 152#正解率の書き込み 153f = open("result/ANSWER.txt","w") 154 155for dir in os.listdir("data/train"): 156 if dir == ".DS_Store": 157 continue 158 159 dir1 = "data/test/" + dir 160 label = 0 161 162 if dir == "a": # 左下に最大応力:ラベル0 163 label = 0 164 elif dir == "b": # 右下に最大応力:ラベル1 165 label = 1 166 elif dir == "c": # 右下に最大応力:ラベル1 167 label = 2 168 elif dir == "d": # 右下に最大応力:ラベル1 169 label = 3 170 elif dir == "e": # 右下に最大応力:ラベル1 171 label = 4 172 elif dir == "f": # 右下に最大応力:ラベル1 173 label = 5 174 elif dir == "g": # 右下に最大応力:ラベル1 175 label = 6 176 elif dir == "h": # 右下に最大応力:ラベル1 177 label = 7 178 elif dir == "i": # 右下に最大応力:ラベル1 179 label = 8 180 181 182 for file in os.listdir(dir1): 183 if file != ".DS_Store": 184 label_list.append(label) 185 filepath = dir1 + "/" + file 186 image = np.array(Image.open(filepath).resize((x, y))) 187 print(filepath) 188 image =np.reshape(image, A) 189 result = model.predict_classes(np.array([image / 255.])) 190 print("label:", label, "result:", result[0]) 191 L = label 192 R = result[0] 193 f.write(filepath) 194 f.write("\nlabel:{} result:{}\n".format(L, R) ) 195 total += 1. 196 197 if label == result[0]: 198 ok_count += 1. 199 200 201 202 203print("正答率: ", ok_count / total * 100, "%") 204SEIKAI =ok_count / total * 100 205f.write("\n正答率:{}".format(SEIKAI)) 206 207end_time = time.time() 208print("終了時刻: ",end_time) 209print ("かかった時間: ", (end_time - start_time)) 210 211ttime = end_time - start_time 212fa = open("result/TIME.txt","w") 213fa.write("\nかかった時間:{} ".format(ttime)) 214fa.close() 215 216
回答1件
あなたの回答
tips
プレビュー