如何尝试一个函数的一组可能参数的所有组合并收集结果值?
How could all combinations of a set of possible arguments of a function be tried and the resultant values be collected?
我有以下形式的函数:
def NN(epochs = None, hidden_nodes = None):
# ... calculations...
return score
我想通过一组可能参数的组合记录它的返回值:
epochs = [10, 100]
architecture = [
[5, 10],
[5, 10],
[5, 10]
]
我的意思是我想 运行 函数多次使用以如下方式指定的参数集的组合并收集结果值:
NN(epochs = 10, hidden_nodes = [5])
NN(epochs = 10, hidden_nodes = [10])
NN(epochs = 10, hidden_nodes = [5, 5])
NN(epochs = 10, hidden_nodes = [5, 10])
NN(epochs = 10, hidden_nodes = [10, 5])
NN(epochs = 10, hidden_nodes = [10, 10])
NN(epochs = 10, hidden_nodes = [5, 5, 5])
NN(epochs = 10, hidden_nodes = [5, 5, 10])
NN(epochs = 10, hidden_nodes = [5, 10, 10])
NN(epochs = 10, hidden_nodes = [10, 10, 10])
NN(epochs = 10, hidden_nodes = [5, 10, 5])
...
NN(epochs = 100, hidden_nodes = [ 5])
NN(epochs = 100, hidden_nodes = [10])
NN(epochs = 100, hidden_nodes = [5, 5])
...
什么是解决此类问题的好方法?
您可以像这样使用 itertools:
import itertools
epochs = [10, 100]
architecture = [5, 10]
for epock in epochs:
for nodes_count in xrange(1, 4):
combinations = itertools.product(architecture, repeat=nodes_count)
for combination in combinations:
print epock, list(combination)
输出:
10 [5]
10 [10]
10 [5, 5]
10 [5, 10]
10 [10, 5]
10 [10, 10]
10 [5, 5, 5]
10 [5, 5, 10]
10 [5, 10, 5]
10 [5, 10, 10]
10 [10, 5, 5]
10 [10, 5, 10]
10 [10, 10, 5]
10 [10, 10, 10]
100 [5]
100 [10]
100 [5, 5]
100 [5, 10]
100 [10, 5]
100 [10, 10]
100 [5, 5, 5]
100 [5, 5, 10]
100 [5, 10, 5]
100 [5, 10, 10]
100 [10, 5, 5]
100 [10, 5, 10]
100 [10, 10, 5]
100 [10, 10, 10]
我有以下形式的函数:
def NN(epochs = None, hidden_nodes = None):
# ... calculations...
return score
我想通过一组可能参数的组合记录它的返回值:
epochs = [10, 100]
architecture = [
[5, 10],
[5, 10],
[5, 10]
]
我的意思是我想 运行 函数多次使用以如下方式指定的参数集的组合并收集结果值:
NN(epochs = 10, hidden_nodes = [5])
NN(epochs = 10, hidden_nodes = [10])
NN(epochs = 10, hidden_nodes = [5, 5])
NN(epochs = 10, hidden_nodes = [5, 10])
NN(epochs = 10, hidden_nodes = [10, 5])
NN(epochs = 10, hidden_nodes = [10, 10])
NN(epochs = 10, hidden_nodes = [5, 5, 5])
NN(epochs = 10, hidden_nodes = [5, 5, 10])
NN(epochs = 10, hidden_nodes = [5, 10, 10])
NN(epochs = 10, hidden_nodes = [10, 10, 10])
NN(epochs = 10, hidden_nodes = [5, 10, 5])
...
NN(epochs = 100, hidden_nodes = [ 5])
NN(epochs = 100, hidden_nodes = [10])
NN(epochs = 100, hidden_nodes = [5, 5])
...
什么是解决此类问题的好方法?
您可以像这样使用 itertools:
import itertools
epochs = [10, 100]
architecture = [5, 10]
for epock in epochs:
for nodes_count in xrange(1, 4):
combinations = itertools.product(architecture, repeat=nodes_count)
for combination in combinations:
print epock, list(combination)
输出:
10 [5]
10 [10]
10 [5, 5]
10 [5, 10]
10 [10, 5]
10 [10, 10]
10 [5, 5, 5]
10 [5, 5, 10]
10 [5, 10, 5]
10 [5, 10, 10]
10 [10, 5, 5]
10 [10, 5, 10]
10 [10, 10, 5]
10 [10, 10, 10]
100 [5]
100 [10]
100 [5, 5]
100 [5, 10]
100 [10, 5]
100 [10, 10]
100 [5, 5, 5]
100 [5, 5, 10]
100 [5, 10, 5]
100 [5, 10, 10]
100 [10, 5, 5]
100 [10, 5, 10]
100 [10, 10, 5]
100 [10, 10, 10]