kerasノート-モデル保存およびtensorboardの使用

5108 ワード

1つのepochのモデル保存およびtensorboardの使用はkerasのコールバック関数Callbacksを使用することができる.
まずコードを見てみましょう.
from keras import backend as K
from keras.models import Sequential
from keras.layers.core import Activation, Dropout
from keras.layers.core import Dense
from keras.optimizers import SGD
from keras.callbacks import ModelCheckpoint, TensorBoard

from keras.datasets import mnist
from keras.utils import np_utils


import numpy as np
import os


np.random.seed(1671)


# 
NB_EPOCH = 20
BATCH_SIZE = 128
VERBOSE = 1
NB_CLASSES = 10
OPTIMIZER = SGD()
N_HIDDEN = 128
VALIDATION_SPLIT = 0.2
DROPOUT = 0.3
MODEL_path = './model/'
if not os.path.exists(MODEL_path):
    os.mkdir(MODEL_path)



# 
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

RESHAPED = 784

#
X_train = X_train.reshape(60000, RESHAPED)
X_test = X_test.reshape(10000, RESHAPED)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')


# 
X_train /= 255
X_test /= 255

print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

Y_train = np_utils.to_categorical(Y_train, NB_CLASSES)
Y_test = np_utils.to_categorical(Y_test, NB_CLASSES)


model = Sequential()
model.add(Dense(N_HIDDEN, input_shape=(RESHAPED,)))
model.add(Activation('relu'))
model.add(Dropout(DROPOUT))
model.add(Dense(N_HIDDEN))
model.add(Activation('relu'))
model.add(Dense(NB_CLASSES))
model.add(Activation('softmax'))
model.summary()


model.compile(loss='categorical_crossentropy', optimizer=OPTIMIZER, metrics=['accuracy'])

checkpoit = ModelCheckpoint(filepath=os.path.join(MODEL_path, 'model-{epoch:02d}.h5'))
tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0, write_graph=True, write_images=True)

history = model.fit(X_train, Y_train,
                    batch_size=BATCH_SIZE, epochs=NB_EPOCH,
                    verbose=VERBOSE, validation_split=VALIDATION_SPLIT, callbacks=[checkpoit, tensorboard])

# 
model.save('mnist.h5')

score = model.evaluate(X_test, Y_test, verbose=VERBOSE)
print('test score:', score[0])
print('test accuracy:', score[1])


コールバック関数の使用


コールバック関数は、トレーニングのフェーズで使用される関数の集合です.コールバック関数を使用して、トレーニングモデルの内在的な状態と統計を表示できます.callbacksのキーワードパラメータとして、SequentialまたはModelのタイプの.fit()メソッドにリストのコールバック関数を渡すことができます.訓練時には,対応するコールバック関数のメソッドがそれぞれのフェーズで呼び出される.

ModelCheckpoint

keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)

各トレーニング期間の後にモデルを保存します.filepathは、epochの値およびlogsのキー(on_epoch_endパラメータによって伝達される)によって埋め込まれ得る命名フォーマットオプションを含むことができる.
たとえば、filepathweights.{epoch:02d}-{val_loss:.2f}.hdf5である場合、モデルが保存されているファイル名には、トレーニングホイール数と検証損失があります.
パラメータ
  • filepath:文字列、モデルのパスを保存します.
  • monitor:モニタリングされたデータ.
  • verbose:詳細モード、0または1.
  • save_best_only:save_best_only=Trueであれば、モニタリングされたデータの最適なモデルは上書きされません.
  • mode:{auto,min,max}のいずれか.save_best_only=Trueの場合、保存ファイルを上書きするかどうかの決定は、監視データの最大値または最小値に依存する.val_accの場合、パターンはmaxであり、val_lossの場合、パターンはminなどである必要がある.autoモードでは、モニタされたデータの名前から方向が自動的に判断されます.
  • save_weights_only:Trueの場合、モデルの重みだけが保存されます(model.save_weights(filepath))、そうでない場合、モデル全体が保存されます(model.save(filepath)).
  • period:各チェックポイント間の間隔(トレーニングホイール数).

  • TensorBoard

    keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=0, batch_size=32, write_graph=True, write_grads=False, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None)
    

    Tensorboardは基本的に可視化されています.
    TensorBoardはTensorflowによって提供される可視化ツールです.
    このコールバック関数はTensorboardのためにログを作成し、テストと訓練の標準評価の動的画像を可視化したり、モデル内の異なる層の活性化値ヒストグラムを可視化したりすることができます.
    pipを使用してTensorflowをインストールした場合は、コマンドラインからTensorflowを起動できます.
    tensorboard --logdir=/full_path_to_your_logs
    

    パラメータ
  • log_dir:TensorBoardによって分析されたログファイルを保存するファイル名.
  • histogram_freq:モデル内の各レイヤについて、アクティブ値とモデルウェイトヒストグラムの周波数(トレーニングホイール数)を計算します.0に設定すると、ヒストグラムは計算されません.ヒストグラム可視化の検証データ(または分離データ)については明確に指摘しなければならない.
  • write_graph:TensorBoardで画像を可視化するかどうか.もしwrite_graphはTrueに設定され、ログファイルは非常に大きくなります.
  • write_grads:TensorBoardで勾配値ヒストグラムを可視化するかどうか.histogram_freqは0より大きくなければなりません.
  • batch_size:ヒストグラムで計算された転送ニューロンネットワーク入力バッチのサイズ.
  • write_images:TensorBoardでモデルウェイトを画像で可視化するかどうか.
  • embeddings_freq:選択された埋め込み層が保存される頻度(トレーニングホイール).
  • embeddings_layer_names:モニタリングされるレイヤの名前のリストです.Noneまたは空のリストの場合、すべての埋め込みレイヤが監視されます.
  • embeddings_metadata:この埋め込み層メタデータファイルが保存されている名前まで対応するレイヤの名前を辞書に表示します.メタデータのデータフォーマットの詳細を表示します.同じメタデータが使用される埋め込みレイヤに使用されないように、文字列が入力されます.