Keras:方法on_batch_end()很慢,但我没有回调?

时间:2018-05-22 14:05:25

标签: python keras

凯拉斯警告我:

  

UserWarning:与批量更新(0.988304)相比,方法on_batch_end()速度较慢。检查你的回调。

我的keras脚本中没有回调,但我使用DataGeneratorkeras.utils.Sequence)。这可能是个问题吗?

对于DataGenerator,我实施了__init__()__len__()__getitem()__on_epoch_end方法。

对于on_epoch_end,我有:

def on_epoch_end(self):
    """
    This method will be called between every epoch, so we can shuffle the
    indexes here.
    """
    self.indexes = np.arange(len(self.image_names))
    if self.shuffle:
        np.random.shuffle(self.indexes)

完整的callstack如下:

  

使用TensorFlow后端。   /var/lib/condor/execute/slot1/dir_30551/anaconda/envs/cellimage/lib/python3.6/site-packages/skimage/transform/_warps.py:84:UserWarning:默认模式,'常量& #39;,将更改为'反映'在skimage 0.15。

     

警告("默认模式,'常数',将更改为'反映' in"   /var/lib/condor/execute/slot1/dir_30551/anaconda/envs/cellimage/lib/python3.6/site-packages/keras/callbacks.py:120:UserWarning:方法on_batch_end()与批量更新相比较慢(0.586719)。检查你的回调。     %delta_t_median)

     

/var/lib/condor/execute/slot1/dir_30551/anaconda/envs/cellimage/lib/python3.6/site-packages/keras/callbacks.py:120:UserWarning:方法on_batch_end()与批量更新(0.988304)。检查你的回调。     %delta_t_median)

2 个答案:

答案 0 :(得分:0)

这可能与您对verbose的设置有关。

我看到的也一样。我认为这是因为我在verbose=1的通话中有fit()-即打印进度条和当前统计信息是一个批处理结束任务,需要花费太长时间。如果我将verbose=2设置为仅在时代结束时打印,或者将verbose=0设置为完全不打印,则警告会停止,这一假设得到了支持。如果我增加批次大小,警告也会停止。

答案 1 :(得分:0)

这是警告,说明您的训练过程中的某些步骤(批处理更新除外)会异常缓慢。

通过在2个单独的jupyter Notebook实例中训练相同的模型,我得到相同的警告。 (但是,一次只训练1个模型不会产生警告。)

关于数据生成器。这可能是造成问题的原因。 如果您的批处理量很小,则批处理更新步骤可能比临时计算要快得多。

此github问题说明了cpu负载过重,训练设置不正确(例如批大小非常小)以及其他可能触发警告的示例 https://github.com/keras-team/keras/issues/5008