MNISTデータセットで訓練したモデルたちを自前の手書き画像で検証したい。
発生している問題・エラーメッセージ
パラメーターを少しいじった18通りの訓練させたモデルをhdf5ファイルとして保存して、for文を使って自作で用意した手書き数字画像を使って検証しようとしたら、メモリリークしてしまいます。
for文を使わずに、1つずつやればメモリリークすることはないのですが、せっかくなので解決策を探そうとしたのですが、太刀打ちできませんでした....
使用可能な RAM をすべて使用した後で、セッションがクラッシュしました。
クラッシュが起こったことに対しての質問・気になった点
- メモリーを開放?する方法、またはメモリの使用量を抑える方法
- そもそもクラッシュした理由として、何故こんなにメモリを使っているのか
該当のソースコード
Python
1# 数字画像の読み込みとリサイズ 2import cv2 3import matplotlib.pyplot as plt 4import pandas as pd 5 6img_raw_list = [] 7img_resize_list = [] 8 9for x in range(10): 10 img_raw_list.append(255 - cv2.imread('{}.png'.format(x), flags=cv2.IMREAD_GRAYSCALE)) 11 img_resize_list.append(cv2.resize(img_raw_list[x], (28,28))) 12 13for i in range(0, 10, 2): 14 fig1, axes1 = plt.subplots(1, 4) 15 axes1[0].imshow(img_raw_list[i]) 16 axes1[1].imshow(img_resize_list[i]) 17 axes1[2].imshow(img_raw_list[i + 1]) 18 axes1[3].imshow(img_resize_list[i + 1]) 19 fig1.tight_layout() 20 plt.show() 21 22plt.savefig('Numbers.png')
Python
1import cv2 2import matplotlib.pyplot as plt 3 4#答えの判定用 5label = list(range(10)) 6#各モデルで用意した手書き数字を検証した際の結果を保存するやつ 7result_list = [] 8#各モデルでの正答率 9result_acc = [] 10#作ったモデル 11histories = ['Adam', 12 'SGD', 13 'RMSprop', 14 'batch_64', 15 'batch_1024', 16 'batch_2048', 17 'layer_5', 18 'layer_6', 19 'layer_7', 20 'Unit256', 21 'Unit1024', 22 'Unit2048', 23 'Linear', 24 'Sigmoid', 25 'Softplus', 26 'Epoch_10', 27 'Epoch_50', 28 'Epoch_100'] 29 30#問題のfor文 31for history in histories: 32 #途中経過を確認するための出力 33 print('Running {}'.format(history)) 34 35 result = [] 36 #正答率を計算する用 37 count = 0 38 for x in range(10): 39 input = img_resize_list[x].reshape((1,784)) 40 input = input.astype('float32') 41 input /= 255 42 43 # 学習済みモデルの読み込み 44 from keras.models import load_model 45 model = tf.keras.models.load_model('model_{}.hdf5'.format(history)) 46 47 # 手書き数字の予測 48 pred = model.predict(input, verbose=0) 49 result.append(pred.argmax()) 50 #正答率の計算 51 if label[x] == (pred.argmax()).astype(int): 52 count += 1 53 result_list.append(result) 54 result_acc.append(count/10) 55 56#pandas使って表として出そうとしてます 57df = pd.DataFrame(result_list, index = histories, columns = label) 58df['Accuracy'] = result_acc 59fig2, axes2 = plt.subplots() 60axes2.axis('off') 61tbl = axes2.table(cellText = df.values, 62 colLabels=df.columns, 63 rowLabels=df.index) 64 65#表を画像として保存 66plt.savefig('Accuracy.png') 67plt.show()
補足情報(FW/ツールのバージョンなど)
google colab(RAM:25.51GB)
回答2件
あなたの回答
tips
プレビュー