UserWarning:与批量更新(0.988304)相比,方法on_batch_end()速度较慢。检查你的回调。
我的keras脚本中没有回调,但我使用DataGenerator
(keras.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)
答案 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