前回構築した*1損失関数で傷位置検出ができるか、
確かめてみます
先ず、損失値と評価値を出力します
def write_log(msg): os.makedirs('./log', exist_ok=True) file = open('./log/trainingLog.txt', mode='a') file.write(msg + '\n') file.close()
tensorflowにはtensorboardという結果可視化ツールがありますが、
個人的には訳のわからないバイナリを吐かれるのが嫌いです
tensorboardも将来的には使いこなしていく必要があると思いますが、
今回は原始的にテキストで出力しました
更に、学習済みモデルにテスト用画像を適用した結果も出力します
def write_model(W_conv1, b_conv1, W_conv2, b_conv2, W_fc1, b_fc1, W_fc2, b_fc2, output, label): output_np = np.zeros([TEST_DATA_SIZE, OUTPUT_SIZE]) for k in range(TEST_DATA_SIZE): for j in range(OUTPUT_SIZE): output_np[k, j] = output[k, j] np.savetxt('./model/output.txt', output_np)
ニューラルネットワークのパラメタ等もまとめて出力したために引数が多くなっています
今回みるのは、outputのみです
出力した結果を、画像と並べて表示します
とりあえず、100回バッチ計算を回した結果をみてみました
import matplotlib.cm as cm import matplotlib.pyplot as plt import numpy as np TEST_DATA_SIZE = 50 IMG_SIZE = 64 OUTPUT_SIZE = 16*16 from PIL import Image if __name__=='__main__': data = np.loadtxt('./model/output.txt') for k in range(TEST_DATA_SIZE): plt.figure(figsize=(8, 4)) filename = './data/Class1_def/' + str(1 + k) + '.png' im = Image.open(filename) plt.subplot(1, 2, 1) plt.imshow(im) plt.xticks(color='None') plt.yticks(color='None') plt.subplot(1, 2, 2) for i in range(16): for j in range(16): plt.plot(i*32 + 0.5, j*32 + 0.5, '.', color=cm.jet(data[k, i*16 + j])) plt.xlim(0, 512) plt.ylim(512, 0) plt.xticks(color='None') plt.yticks(color='None') #plt.show() filename = './test/result_' + str(1 + k) + '.png' plt.savefig(filename)
損失値は一応減っていきますが、、、
ダメそうですね(泣)
50枚の画像をテストに使っていますが、
ほぼ全ての画像からの出力が同じ値になりました
学習回数を増やしたら、全て同じになってしまう気がします
何か間違っているんだな、、、