【问题标题】:A custom alternating update rule with keras使用 keras 的自定义交替更新规则
【发布时间】:2017-12-13 05:52:04
【问题描述】:

我想在 keras 中使用交替更新规则。 IE。每批我想调用一个基于梯度的常规步骤,然后调用一个自定义步骤。

我考虑通过继承优化器或回调来实现它(并使用批量调用)。但是,两者都不会,因为它们都缺少批处理数据和批处理标签(我需要两者)。

知道如何使用 keras 实现自定义交替更新吗?

如果需要,我不介意直接调用 tensorflow 特定的方法,只要我可以继续使用 keras 框架包裹的项目(带有 model.fit、model.predict ..)

【问题讨论】:

    标签: optimization tensorflow keras keras-layer keras-2


    【解决方案1】:

    尝试创建自定义回调

    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 和 loss。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多