@菜鳥初学keras誤り一20190620


@菜鳥初学keras誤り一20190620
きょうのまちがいを書き記す
初めてkerasを使って、modelを知りません.モデルを知らないfitは、checkpointなどのモデルをどのように保存するか分かりません.もがいてみると、モデル関連の保存はModelcheckpoint()で保存できることがわかりました
Modelcheckpointの説明
原版は読めるhttps://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ModelCheckpoint
tf.keras.callbacks.ModelCheckpoint
説明:
Class ModelCheckpoint
Inherits From: Callback

Defined in tensorflow/python/keras/callbacks.py.

Save the model after every epoch.

filepath can contain named formatting options, which will be filled the value of epoch and keys in logs (passed in on_epoch_end).

For example: if filepath is weights.{epoch:02d}-{val_loss:.2f}.hdf5, then the model checkpoints will be saved with the epoch number and the validation loss in the filename.


### Arguments:

 1. filepath: string, path to save the model file.
 2. monitor: quantity to monitor.
 3. verbose: verbosity mode, 0 or 1.
 4. save_best_only: if save_best_only=True, the latest best model according to the quantity monitored will not be overwritten.
 5. mode: one of {auto, min, max}. If save_best_only=True, the decision to overwrite the current save file is made based on either the maximization or the minimization of the monitored quantity. For val_acc, this should be max, for val_loss this should be min, etc. In auto mode, the direction is automatically inferred from the name of the monitored quantity.
 6. save_weights_only: if True, then only the model's weights will be saved (model.save_weights(filepath)), else the full model is saved (model.save(filepath)).
 7. period: Interval (number of epochs) between checkpoints.

使用法
参考になるhttp://frankchen.xyz/2018/04/19/keras-reuse-model/
モデルの保存
以下に、保存したhdf 5ファイル名を定義してModelCheckpointを初期化し、Kerasのcallback(すなわち、batchごとに終了した後に行うこと)に追加すると、batchが終了するたびにモデルが比較され、最適なモデルが保存されます.
from keras.callbacks import ModelCheckpoint
# create model
model = Sequential()
model.add(...)
model.add(...)
model.add(...)
# Compile model
model.compile(...)
# checkpoint
filepath="weights-{epoch:02d}-{val_acc:.2f}.hdf5" #   
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
# Fit the model
model.fit(X, Y, validation_split=0.33, epochs=150, batch_size=10, callbacks=[checkpoint], verbose=0)


モデルのロード
なお、以前はモデルのweightsのみが保存されていたが、(ps:すべてのモデルを保存するにはsave_weights_only=False、Trueはweight_modelのみが保存されている)再loadはモデル構造を再定義してからload weightsを再combineする必要がある
from keras.callbacks import ModelCheckpoint
# create model
model = Sequential()
model.add(...)
model.add(...)
model.add(...)
# load weights
model.load_weights("weights.best.hdf5")
# Compile model 
model.compile(...)
# estimate accuracy 
scores = model.evaluate(X, Y, verbose=0)
print('{}: {:.2%}'.format(model.metrics_names[1], scores[1]))


モデル構造も一緒に保存する(つまりModelCheckpointでsave_weights_only=False)を選択した場合、loadは簡単です.
from keras.callbacks import ModelCheckpoint
from keras.models import load_model
# create model
model = Sequential()
model.add(...)
model.add(...)
model.add(...)
# Compile model
model.compile(...)
# checkpoint
filepath="weights-best.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max', save_weights_only=False)
# Fit the model
model.fit(X, Y, validation_split=0.33, epochs=150, batch_size=10, callbacks=[checkpoint], verbose=0)
# Load the model
model= load_model(filepath)
scores=model.evaluate(X, Y,verbose=0)
print('{}: {:.2%}'.format(model.metrics_names[1], scores[1]))

そして大きなバグが
実行中にエラーが発生しました:AttributeError:'ModelCheckpoint'object has no attribute'on_train_batch_begin’はどうすればいいか分からないが,後で見た.https://xbuba.com/questions/55112713霊光が現れると、importの時に間違いがあったことに気づいた.
   
from keras.callbacks import Modelcheckpoint
   tensorflow   , 
from tensorflow.python.keras.callbacks import ModelCheckpoint

それからコードを走ることができますが、まだ多くの問題があります.ここ数日モデルを作ってみましょう.compile()の関連知識ps:新しい知識を学ぶのは遅いですね.まだこのモデルを理解していません.fitとかtf.session()の適用状況は?ps:合成した5 D tensorを4 Dに変換する方法を知っている人はいますか?