Q&A
kerasを用いて,画像を入力データとして,数値予測する回帰分析をしています.
CSVloggerを用いて各エポック毎にloss.val_lossを出力しているのですが,予測値の出力仕方が分かります.以下のコードに加えたいのですが,どのよううにコーディングすればよいでしょうか?
python
1#最大応力の値の予測 2from keras.models import Sequential 3from keras.layers import Activation, Dense, Dropout, LeakyReLU 4#from keras.layers.advanced_activations import LeakyReLU 5from keras.utils.np_utils import to_categorical 6from keras.optimizers import Adagrad 7from keras.optimizers import Adam 8from keras.models import load_model 9from keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger 10from sklearn.model_selection import train_test_split 11from sklearn import datasets 12import numpy as np 13from PIL import Image 14import os 15import time 16import csv 17import cv2 18import math 19 20 21start_time = time.time() 22print("開始時刻: " + str(start_time)) 23#それぞれの画像の枚数を入力 24A = 50 25B = 50 26sum =A+B 27# 学習用のデータを作る. 28image_list = [] 29location_list = [] 30#ハイパーパラメータ 31#画像サイズ 32x = 150 33y = 75 34Z = x*y #入力層のノード数 35#エポック数 36E = 5 37#バッチサイズ 38BATCH_SIZE = 32 39#学習率 40LR = 0.00001 41#訓練データの数 train=sum 42train=sum 43 44#画像の読み込み:読み込み→リサイズ→1列に変換→正規化 45print("画像の読み込み 開始") 46count=1 47for i in range(0,A): 48 im = cv2.imread("data/image/a/"+str(i)+"a.png".format(i),1) #画像の読み込み 49 print(str(i)+"a.png") 50 image = np.array(Image.open("data/image/a/"+str(i)+"a.png").resize((x, y))) #画像をnum配列にしてリサイズ 51 print(image.shape) 52 image =np.reshape(image,Z) #2次元行列を1次元行列に変換 53 print(image.shape) 54 image_list.append(image / 255.) #appendは追加:1枚ずつ足しこんでいく 55 print(str(count)+"/"+str(train)) 56 count +=1 57 print('\n') 58 59for i in range(0,B): 60 im = cv2.imread("data/image/b/"+str(i)+"b.png".format(i),1) #画像の読み込み 61 print(str(i)+"b.png") 62 image = np.array(Image.open("data/image/b/"+str(i)+"b.png").resize((x, y))) #画像をnum配列にしてリサイズ 63 print(image.shape) 64 image =np.reshape(image,Z) #2次元行列を1次元行列に変換 65 print(image.shape) 66 image_list.append(image / 255.) #appendは追加:1枚ずつ足しこんでいく 67 print(str(count)+"/"+str(train)) 68 count +=1 69 print('\n') 70 71print("画像の読み込み 終了") 72 73# kerasに渡すためにnumpy配列に変換。 74image_list = np.array(image_list) 75 76#最大応力の位置_読み込み_表示 77location = np.loadtxt("data/value/max_stress_value_a.csv",delimiter=",",skiprows=0) 78location_list.extend(location) 79location = np.loadtxt("data/value/max_stress_value_b.csv",delimiter=",",skiprows=0) 80location_list.extend(location) 81location_list = np.array(location_list) 82print("\n最大応力の値の行列の形") 83print(location_list.shape) 84#print(location_list) 85np.savetxt("data/value/max_stress_value_true.csv",location_list,delimiter=",") 86#最大応力の位置_読み込み_終了 87 88# モデルを生成してニューラルネットを構築 89model = Sequential() 90 91model.add(Dense(5000, input_dim=Z,kernel_initializer='random_uniform',bias_initializer='zeros')) 92#model.add(Activation("LeakyReLU")) 93model.add(LeakyReLU()) 94model.add(Dropout(0.2)) 95 96 97model.add(Dense(100,kernel_initializer='random_uniform',bias_initializer='zeros')) 98model.add(LeakyReLU()) 99model.add(Dropout(0.075)) 100 101 102model.add(Dense(10,kernel_initializer='random_uniform',bias_initializer='zeros')) 103model.add(LeakyReLU()) 104model.add(Dropout(0.0)) 105 106model.add(Dense(5,kernel_initializer='random_uniform',bias_initializer='zeros')) 107model.add(LeakyReLU()) 108model.add(Dropout(0.0)) 109 110model.add(Dense(1)) 111model.add(Activation("linear")) 112 113# オプティマイザ(最適化)にAdamを使用 114opt = Adam(lr=LR) 115 116# モデルをコンパイル 117#最大応力位置の予測 誤差関数:二乗誤差 118model.compile(loss="mean_absolute_percentage_error", optimizer=opt) 119 120#CSVに各エポックの学習結果の保存 121csv_logger = CSVLogger('result/training_process.csv') 122 123# 学習を実行。20%はテストに使用 124#最大応力位置の予測 モデルフィット 125history = model.fit(image_list, location_list, nb_epoch=E,verbose=1,callbacks=[csv_logger], batch_size=BATCH_SIZE, validation_split=0.2) 126 127#最大応力位置の予測 誤差の評価 128loss = model.evaluate(image_list, location_list) 129 130#最終の学習結果を書き込む 131fp = open("result/RESULT.txt","w") 132fp.write("\nloss:{}".format(loss)) 133fp.close() 134 135#最終の誤差の表示 136print("\nloss:{}\n".format(loss)) 137 138#予測値 139predicted= model.predict(image_list) 140#print("NNの最大応力の値 予測値") 141#print(predicted) 142np.savetxt("result/max_stress_value_predict_result.csv",predicted,delimiter=",") 143 144image_list = np.array(image_list) 145location_list = np.array(location_list) 146print(image_list.shape, image_list.dtype) # (300, 11250) float64 147print(location_list.shape, location_list.dtype) # (300,) float64 148 149 150def get_batch(image_list, location_list, batch_size, shuffle=False): 151 '''ミニバッチを生成するジェネレーター関数 152 ''' 153 num_samples = location_list # サンプル数 154 if shuffle:# シャッフルする場合 155 indices = np.random.permutation(num_samples) 156 else: # シャッフルしない場合 157 indices = np.random.arange(num_samples) 158 num_steps = np.ceil(num_samples / batch_size).astype(int) 159 print(num_steps) 160 print(type(num_steps)) 161 162 for itr in range(num_steps): 163 start = batch_size * itr 164 excerpt = indices[start:start + batch_size] 165 yield x[excerpt], y[excerpt] 166 167# 保存用ディレクトリ 168out_dirpath = 'prediction' 169os.makedirs(out_dirpath, exist_ok=True) 170 171x_train, x_test, y_train, y_test = train_test_split(image_list, location_list, test_size=0.2) 172 173# 学習する。 174epochs = E 175for i in range(epochs): 176 for x_batch, y_batch in get_batch(x_train, y_train, batch_size=BATCH_SIZE, shuffle=True): 177 # x_batch, y_batch が生成されたミニバッチ 178 179 # 1バッチ分学習する 180 model.train_on_batch(x_batch, y_batch) 181 182 # エポックごとにテストデータで推論する。 183 y_pred = model.predict_classes(x_train) 184 result = np.c_[y_pred, y_train] 185 186 # 推論結果を保存する。 187 filepath = os.path.join(out_dirpath, 'prediction_{}.csv'.format(i)) 188 np.savetxt(filepath, result, fmt='%.0f') 189 190 191 192end_time = time.time() 193print("\n終了時刻: ",end_time) 194print ("かかった時間: ", (end_time - start_time)) 195ttime = end_time - start_time 196fa = open("result/TIME.txt","w") 197fa.write("\nかかった時間:{} ".format(ttime)) 198fa.close() 199 200 201 202
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2018/10/24 07:33
2018/10/24 07:58
2018/10/24 08:39
2018/10/24 08:42
2018/10/24 08:42
2018/10/24 08:46 編集
2018/10/25 04:13
2018/10/25 04:15
2018/10/25 04:15
2018/10/25 04:56
2018/10/25 05:08
2018/10/25 05:12
2018/10/25 05:21
2018/10/25 05:29
2018/10/25 05:48
2018/10/25 05:51
2018/10/25 05:56
2018/10/25 06:01
2018/10/25 06:02 編集
2018/10/25 06:06
2018/10/25 06:07
2018/10/25 06:11 編集
2018/10/25 06:15
2018/10/25 06:23 編集
2018/10/25 06:41
2018/10/25 06:47
2018/10/25 06:51
2018/10/25 06:53
2018/10/25 06:56
2018/10/25 07:02
2018/10/25 07:06
2018/10/25 07:14