前提・実現したいこと
keras にて学習経過の様子を matplitlib で描画しようとしたのですが、KeyError: 'acc' というエラーが出て実行できません。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-9-8251e2560412> in <module>() 46 # 学習の様子をグラフへ描画 --- (*6) 47 # 正解率の推移をプロット ---> 48 plt.plot(hist.history['acc']) 49 plt.plot(hist.history['val_acc']) 50 plt.title('Accuracy') KeyError: 'acc'
該当のソースコード
python
1# MLPでMNISTの分類問題に挑戦 2import keras 3from keras.models import Sequential 4from keras.layers import Dense, Dropout 5from keras.optimizers import RMSprop 6from keras.datasets import mnist 7import matplotlib.pyplot as plt 8 9# 入力と出力を指定 10in_size = 28 * 28 11out_size = 10 12 13# MNISTのデータを読み込み --- (*1) 14(X_train, y_train), (X_test, y_test) = mnist.load_data() 15# データを28*28=784の一次元配列に変換 16X_train = X_train.reshape(-1, 784).astype('float32') / 255 17X_test = X_test.reshape(-1, 784).astype('float32') / 255 18# ラベルデータをone-hotベクトルに直す 19y_train = keras.utils.np_utils.to_categorical(y_train.astype('int32'),10) 20y_test = keras.utils.np_utils.to_categorical(y_test.astype('int32'),10) 21 22# MLPモデル構造を定義 --- (*2) 23model = Sequential() 24model.add(Dense(512, activation='relu', input_shape=(in_size,))) 25model.add(Dropout(0.2)) 26model.add(Dense(512, activation='relu')) 27model.add(Dropout(0.2)) 28model.add(Dense(out_size, activation='softmax')) 29 30# モデルをコンパイル --- (*3) 31model.compile( 32 loss='categorical_crossentropy', 33 optimizer=RMSprop(), 34 metrics=['accuracy']) 35 36# 学習を実行 --- (*4) 37hist = model.fit(X_train, y_train, 38 batch_size=128, 39 epochs=50, 40 verbose=1, 41 validation_data=(X_test, y_test)) 42 43# モデルを評価 --- (*5) 44score = model.evaluate(X_test, y_test, verbose=1) 45print('正解率=', score[1], 'loss=', score[0]) 46 47# 学習の様子をグラフへ描画 --- (*6) 48# 正解率の推移をプロット 49plt.plot(hist.history['acc']) 50plt.plot(hist.history['val_acc']) 51plt.title('Accuracy') 52plt.legend(['train', 'test'], loc='upper left') 53plt.show() 54 55# ロスの推移をプロット 56plt.plot(hist.history['loss']) 57plt.plot(hist.history['val_loss']) 58plt.title('Loss') 59plt.legend(['train', 'test'], loc='upper left') 60plt.show()
試したこと
stackoverflow で同様の問題に対する回答を見つけたのですが、コンパイルの際に metrics=['accuracy'] を指定するという物でした。
既に私の書いたコードでは指定してあるので、原因は他にあるのかと思います。
補足情報(FW/ツールのバージョンなど)
実行環境: Google Colaboratory
tensorflow: 1.15.0
keras: 2.3.1
matplotlib: 3.1.3
回答2件
あなたの回答
tips
プレビュー