2017-07-09 5 views
0

ケラスで交互に更新するルールを使用したいと思います。 I.バッチごとに通常のグラデーションベースのステップを呼び出し、次にカスタムステップを呼び出したいと思います。ケラスを使用したカスタム交互更新ルール

私は、オプティマイザまたはコールバックを継承することによって実装することを考えました(そして、on-batch呼び出しを使用します)。しかし、両方ともバッチデータとバッチラベルが欠けている(と私は両方が必要です)ので、どちらもしません。

kerasを使用してカスタム代替更新プログラムを実装する方法については、

必要な場合は、私がいる限り、私はkerasフレームワークに包まれたプロジェクトの使用を保つことができるよう、tensorflow特定のメソッドの呼び出しを直接気にしない(model.fitと、model.predict ...)

答えて

0

を作成してみてくださいカスタムコールバック

import keras.callbacks as callbacks 

class JSONMetrics(callbacks.Callback): 

_model  = None 
_each_epoch = None 
_metrics = None 
_epoch  = None 
_file_json = None 

def __init__(self,model,each_epoch,logger=None): 

    self._file_json = "file_log.json" 
    self._model  = model 
    self._each_epoch= each_epoch 
    self._epoch  = 0 
    self._metrics = {'loss':[], 'acc':[]} 

def on_epoch_begin(self, epoch, logs): 
    # print('Epoch {0} begin'.format(epoch)) 
    try: 
     with open(self._file_json, 'r') as f: 
      self._metrics = json.load(f) 

def on_epoch_end(self, epoch, logs): 
    self._logger.info('Nemesis: Epoch {0} end'.format(epoch)) 

    self._metrics['loss'].append(logs.get('loss')) 
    self._metrics['acc'].append(logs.get('acc')) 
    with open(self._file_json, 'w') as f: 
     data = json.dump(self._metrics, f) 

    if self._epoch % self._each_epoch == 0: 

     file_name = 'weights%08d.h5' % self._epoch 
     #print('Saving weights at {0} file'.format(file_name)) 
     self._model.save_weights(file_name) 

    self._epoch += 1 

self.modelを呼び出すと、問題を解決し、たとえばaccと損失を保存できます。

関連する問題