Python 使用贝叶斯优化时,队列为空
我正在使用python库“bayes_opt”使用贝叶斯优化来优化NN的超参数,但出现了一个错误 ~\Miniconda3\envs\tensorflow\lib\site packages\bayes\u opt\bayesian\u optimization.py 在下一步中(自我) 25如果self.empty: --->26 raise StopIteration(“队列为空,没有更多要检索的对象”) 27 obj=self.\u队列[0] StopIteration:队列为空,没有更多要检索的对象 我的代码如下:Python 使用贝叶斯优化时,队列为空,python,optimization,neural-network,bayesian,Python,Optimization,Neural Network,Bayesian,我正在使用python库“bayes_opt”使用贝叶斯优化来优化NN的超参数,但出现了一个错误 ~\Miniconda3\envs\tensorflow\lib\site packages\bayes\u opt\bayesian\u optimization.py 在下一步中(自我) 25如果self.empty: --->26 raise StopIteration(“队列为空,没有更多要检索的对象”) 27 obj=self.\u队列[0] StopIteration:队列为空,没有更多
from bayes_opt import BayesianOptimization
import time
# Supress NaN warnings, see: https://stackoverflow.com/questions/34955158/what-might-be-the-cause-of-invalid-value-encountered-in-less-equal-in-numpy
import warnings
warnings.filterwarnings("ignore",category =RuntimeWarning)
# Bounded region of parameter space
pbounds = {'dropout': (0.0, 0.499),
'lr': (0.0, 0.1),
'neuronPct': (0.01, 1),
'neuronShrink': (0.01, 1)
}
optimizer = BayesianOptimization(
f=evaluate_network,
pbounds=pbounds,
verbose=2, # verbose = 1 prints only when a maximum is observed, verbose = 0 is silent
random_state=1,
)
start_time = time.time()
optimizer.maximize(init_points=10, n_iter=100,)
time_took = time.time() - start_time
print(optimizer.max)
输出如下:
| iter | target | dropout | lr | neuronPct | neuron... |
-------------------------------------------------------------------------
| 1 | -0.5718 | 0.2081 | 0.07203 | 0.01011 | 0.3093 |
| 2 | -0.5906 | 0.07323 | 0.009234 | 0.1944 | 0.3521 |
| 3 | -2.475 | 0.198 | 0.05388 | 0.425 | 0.6884 |
| 4 | -0.5708 | 0.102 | 0.08781 | 0.03711 | 0.6738 |
| 5 | -0.5749 | 0.2082 | 0.05587 | 0.149 | 0.2061 |
| 6 | -2.487 | 0.3996 | 0.09683 | 0.3203 | 0.6954 |
| 7 | -0.5669 | 0.4373 | 0.08946 | 0.09419 | 0.04866 |
| 8 | -0.5701 | 0.08475 | 0.08781 | 0.1074 | 0.4269 |
| 9 | -0.607 | 0.478 | 0.05332 | 0.695 | 0.3224 |
| 10 | -0.581 | 0.3426 | 0.08346 | 0.02811 | 0.7526 |
| 11 | -0.7295 | 0.1606 | 0.0 | 1.0 | 0.01 |
| 12 | -0.7131 | 0.499 | 0.0 | 0.607 | 0.01 |
| 13 | -0.7044 | 0.0 | 0.0 | 0.01 | 0.01 |
| 14 | -0.5872 | 0.04935 | 0.01347 | 0.4728 | 0.4246 |
| 15 | -0.5665 | 0.0 | 0.1 | 0.5566 | 0.01 |
| 16 | -0.9658 | 0.0 | 0.0 | 1.0 | 0.4938 |
| 17 | -0.9074 | 0.0 | 0.0 | 0.01 | 1.0 |
| 18 | -2.464 | 0.499 | 0.1 | 1.0 | 0.1975 |
| 19 | -0.9505 | 0.499 | 0.0 | 1.0 | 1.0 |
| 20 | nan | 0.0 | 0.1 | 1.0 | 1.0 |
注意输出表最后一行的“nan”提前谢谢。同样的事情刚刚发生在我身上。我看到这是一个老帖子,所以没有希望很快得到解决 我设法将其缩小到以下范围:如果pbounds间隔太小,就会发生这种情况。我使pbound间隔稍微大一点,它就停止了
这对我来说很有效,但我希望将来有人能解决这个问题。错误似乎出现在sklearn中。我最近在包中使用bayes_opt时遇到了类似的问题 要解决“StopIteration:队列为空…”错误,我必须从以下位置修改pbounds参数:
pbounds = {'daily_prior': (2, -2), 'yearly_prior': (2, -2)}
到
我已经检查了大多数(如果不是全部的话)bayes_opt示例,到目前为止,它们都有这个
{'param':(最小值,最大值)}
表单
我在bayes_opt存储库中添加了这个答案
这不会修正原始问题中的错误,但我希望它能帮助某些人
另外,以下是我收到的完整错误消息:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 181, in maximize
x_probe = next(self._queue)
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 25, in __next__
raise StopIteration("Queue is empty, no more objects to retrieve.")
StopIteration: Queue is empty, no more objects to retrieve.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "bayes_opt_prophet_bounds_test.py", line 43, in <module>
optimizer.maximize(
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 184, in maximize
x_probe = self.suggest(util)
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 133, in suggest
suggestion = acq_max(
File "/usr/local/lib/python3.8/site-packages/bayes_opt/util.py", line 58, in acq_max
res = minimize(lambda x: -ac(x.reshape(1, -1), gp=gp, y_max=y_max),
File "/usr/local/lib/python3.8/site-packages/scipy/optimize/_minimize.py", line 617, in minimize
return _minimize_lbfgsb(fun, x0, args, jac, bounds,
File "/usr/local/lib/python3.8/site-packages/scipy/optimize/lbfgsb.py", line 294, in _minimize_lbfgsb
raise ValueError("LBFGSB - one of the lower bounds is greater than an upper bound.")
ValueError: LBFGSB - one of the lower bounds is greater than an upper bound.
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.8/site packages/bayes\u opt/bayesian\u optimization.py”,第181行,在第页
x_probe=next(self._队列)
文件“/usr/local/lib/python3.8/site packages/bayes\u opt/bayesian\u optimization.py”,第25行,下一步__
引发StopIteration(“队列为空,没有更多对象可检索。”)
StopIteration:队列为空,没有更多要检索的对象。
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“bayes_opt_prophet_bounds_test.py”,第43行,在
优化器。最大化(
文件“/usr/local/lib/python3.8/site packages/bayes\u opt/bayesian\u optimization.py”,第184行,在第页
x_probe=self.suggest(util)
文件“/usr/local/lib/python3.8/site packages/bayes\u opt/bayesian\u optimization.py”,第133行,建议
建议=acq_最大值(
文件“/usr/local/lib/python3.8/site packages/bayes_opt/util.py”,第58行,在acq_max中
res=最小化(λx:-ac(x.重塑(1,-1),gp=gp,y_max=y_max),
文件“/usr/local/lib/python3.8/site packages/scipy/optimize/_minimize.py”,最小化中的第617行
返回_最小化_lbfgsb(fun、x0、args、jac、bounds、,
文件“/usr/local/lib/python3.8/site packages/scipy/optimize/lbfgsb.py”,第294行,在lbfgsb中
raise VALUETERROR(“LBFGSB-其中一个下限大于上限。”)
ValueError:LBFGSB-其中一个下限大于上限。
init_points arg
似乎是我的问题,我从10开始,一直到45来解决它
最大化(初始点=45,n\u iter=20)
这与您的结果有关。正如您所看到的,行中的目标是np.nan,您的错误是“队列为空,没有更多要检索的对象”,我猜函数已用完您的数据点。但没有什么是确定的,我想您已阅读此包的源代码。
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 181, in maximize
x_probe = next(self._queue)
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 25, in __next__
raise StopIteration("Queue is empty, no more objects to retrieve.")
StopIteration: Queue is empty, no more objects to retrieve.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "bayes_opt_prophet_bounds_test.py", line 43, in <module>
optimizer.maximize(
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 184, in maximize
x_probe = self.suggest(util)
File "/usr/local/lib/python3.8/site-packages/bayes_opt/bayesian_optimization.py", line 133, in suggest
suggestion = acq_max(
File "/usr/local/lib/python3.8/site-packages/bayes_opt/util.py", line 58, in acq_max
res = minimize(lambda x: -ac(x.reshape(1, -1), gp=gp, y_max=y_max),
File "/usr/local/lib/python3.8/site-packages/scipy/optimize/_minimize.py", line 617, in minimize
return _minimize_lbfgsb(fun, x0, args, jac, bounds,
File "/usr/local/lib/python3.8/site-packages/scipy/optimize/lbfgsb.py", line 294, in _minimize_lbfgsb
raise ValueError("LBFGSB - one of the lower bounds is greater than an upper bound.")
ValueError: LBFGSB - one of the lower bounds is greater than an upper bound.