Jupyter notebook因在命令行中工作的代码而失败

2024-10-01 19:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下repo自述文件中所述的命令:

https://github.com/aminnayebi/HesBO/tree/master/BLOSSOM

即:

! python blossom_run.py Hartmann6 100 6 6 1 1

在命令行或jupyter笔记本中执行时,如上面带有“!”的一行它起作用了

但是,如果我从blossom_run.py复制代码,并给它提供相同的参数,那么经过几次迭代之后,它就会失败

import gpbo
from BLOSSOM.embd_functions import *
import numpy as np
import time
import logging
import pickle
import sys

path ='/home/XXX/HesBO/BLOSSOM/blossom_results'

test_func     = 'Hartmann6'
total_itr     = 99
low_dim       = 6
high_dim      = 6
init_n        = 1
rep = job_id  = 1
noise_var = s = 0

bx_size       = 1


act_var      = np.arange(high_dim)
high_to_low  = np.random.choice(range(low_dim), high_dim)
sign         = np.random.choice([-1, 1], high_dim)

f = Hartmann6(act_var, high_to_low, sign=sign, bx_size=bx_size, noise_var=noise_var)

file_name=test_func+'_blossom_d'+str(low_dim)+'_D'+str(high_dim)+'_rep_'+str(rep)+'.csv'
C=gpbo.core.config.eimledefault(f, low_dim, total_itr, s, path, file_name)

if noise_var>0:
    file_name_params = 'blossom_results/param_'+ test_func +'_blossom_d'+str(low_dim)+'_D'+str(high_dim)+'_rep_'+str(rep)
    pickle.dump([high_to_low, sign], open(file_name_params, 'wb'))



上面的代码写在Jupyter笔记本中,经过几次迭代后失败,并返回以下错误:

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) in ----> 1 out = gpbo.search(C)

~/.local/share/virtualenvs/HesBO-qpst6LpL/lib/python3.6/site-packages/gpbo/core/optimize.py in search(optconfig, initdata) 305 optconfig.ojfchar,optconfig.chooser,optconfig.choosepara,initdata=initdata) 306 --> 307 return O.run() 308 309

~/.local/share/virtualenvs/HesBO-qpst6LpL/lib/python3.6/site-packages/gpbo/core/optimize.py in run(self) 113 mode,self.choosepersist,chooseaux = wrap(self.choosefn,self.state,self.choosepersist,**self.choosepara) 114 self.aqpara[mode]['choosereturn']=chooseaux --> 115 x,ev,self.aqpersist[mode],aqaux = wrap(self.aqfn[mode],self.state,self.aqpersist[mode],**self.aqpara[mode]) 116 t1 = time.clock() 117 self.state.aux = aqaux

~/.local/share/virtualenvs/HesBO-qpst6LpL/lib/python3.6/site-packages/gpbo/core/optimize.py in wrap(fn, optstate, persist, **para) 267 if optstate.condition>-20: 268 logger.info('using raised noise floor {} in {}'.format(optstate.condition,fn)) --> 269 return fn(optstate,persist,**para) 270 except gpbo.core.GPdc.GPdcError as e: 271 traceback.print_exc()

gpbo/core/acquisitions.pyx in gpbo.core.acquisitions.EIMAPaq (gpbo/core/acquisitions.c:5018)()

gpbo/core/optutils.pyx in gpbo.core.optutils.twopartopt (gpbo/core/optutils.c:15787)()

gpbo/core/optutils.pyx in gpbo.core.optutils.silentdirectwrapped (gpbo/core/optutils.c:14975)()

gpbo/core/optutils.pyx in gpbo.core.optutils.silentdirect (gpbo/core/optutils.c:13317)()

TypeError: an integer is required (got type OutStream)

我还尝试将上面的相同代码放在python文件中,并在命令行中尝试python文件,因此我确信代码中没有bug,只是在Jupyter笔记本而不是终端中运行它有些奇怪

有解决办法吗


Tags: inpycoreimportselfmodevarlow

热门问题