我获得了以下代码,但我想根据自己的需要对其进行自定义。给定方法调用:
best_n_hidden = hyperparam_selection(
train_network,
n_hidden_range=[10, 128],
func_args=[tr_X, ts_X, tr_y, ts_y],
n_iter=6,
)
def hyperparam_selection(func, n_hidden_range, func_args=None, n_iter=20):
if func_args is None:
func_args = []
scores = []
parameters = []
min_n_hidden, max_n_hidden = n_hidden_range
n_hidden_choices = np.arange(min_n_hidden, max_n_hidden + 1)
# To be able to perform gaussian process we need to
# have at least 2 samples.
n_hidden = random.randint(min_n_hidden, max_n_hidden)
score = func(n_hidden, *func_args) # ISSUE HERE!!
parameters.append(n_hidden)
scores.append(score)
n_hidden = random.randint(min_n_hidden, max_n_hidden)
问题是tr_X, ts_X, tr_y, ts_y
属于<type 'numpy.ndarray'>
类型,因此当使用行*func_args
中的星号运算符score = func(n_hidden, *func_args)
解包它们时,会给我一个问题。我不知道numpy
中我可以用于此案numpy.stack
或numpy.packbits
的等效打包和解包方法是什么。任何提示都表示赞赏。
答案 0 :(得分:0)
在这种情况下,数组并没有什么特别之处。
在通话中,func_args=[tr_X, ts_X, tr_y, ts_y],
,[...]
是一个包含4个项目的列表。它并不重要。
在函数内部,看起来func_args
始终是一个列表,可能是空列表[]
。
在通话score = func(n_hidden, *func_args)
中,该列表将展开为。
我希望有一个
def func(n_hidden, x1, x2, y1, y2):
...
可以工作(如果你总是传递4个对象)。或
def func(n_hidden, *args):
n = len(args)
# args is a tuple.
if len(args)==4:
x1, x2, y1, y2 = args
# or work with
args[0], args[1], etc.
您没有打包或拆包阵列。相反,你正在处理数组的列表或元组。