首页 > 解决方案 > 当工人数量增加并且 numpy 生成一个大数组时,Keras 使用的 CPU 更少

问题描述

我的代码使用了相对广泛的增强策略,但我注意到 CPU 利用率Nfit_generator(...workers=N)增加时不成比例。我有一个 4 核 CPU。

GPU 使用率始终低于 40%。

如果我削减增强策略以省略噪声添加,我可以在N=4. 噪音是由

x += numpy.random.normal(0, noise_sigma, x.shape) / 255.0

其中x是 640x480 BGR 输入图像。这是一个缓慢的调用,平均每次调用大约 24.3 毫秒,但是 CPU 不应该在什么时候继续工作N=4吗?为什么 numpy 在生成大量随机数时似乎会阻塞其他线程?

标签: pythonnumpytensorflowkeras

解决方案


normal来电cont2_array*

https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/mtrand.pyx#L1651

并且有一个lock

这是原因吗?

您可以尝试使用个人RandomState来生成随机数吗?

r = numpy.random.RandomState() 

.....

for ... :
    x += r.normal(0, noise_sigma, x.shape) / 255.0

推荐阅读