这是我到目前为止所做的
import itertools
final_param_list = []
param_list_gen = [[8, 16, 32], ["Sigmoid", "ReLU", "Leaky ReLU"], [10, 20, 50], [1,2]]
for element in itertools.product(*param_list_gen):
final_param_list.append(element)
输出看起来像
[(8, 'Sigmoid', 10, 1), (8, 'Sigmoid', 10, 2), ....]
对于每个列表,每个索引的值是:
index0 = batch size
index1 = activation funtion
index2 = number of nodes
index3 = number of layers
所以在第一个列表中
batch_size = 8
activation='Sigmoid'
units=10
layers=1
我想做的是遍历final_param_list = []中的列表,不仅设置每个参数,而且我只想在layers = 2时添加一个隐藏层。我可以走简单的路线,只需创建两个单独的模型,一个模型具有一个隐藏层,另一个模型具有2个隐藏层,然后分别遍历它们,但是我想做得更优雅一些。
注意:我知道其中一些可能可以通过gridsearch完成,并且我知道隐藏的第1层和第2层将具有相同的参数。最终,我将尽我所能地对它们进行单独调整,但是目前为止我所描述的解决方案就足够了。
答案 0 :(得分:0)
最终探索了@ mkrieger1在评论中提出的解决方案。似乎有效。这是我的代码。
for param in final_param_list:
# ------ model 1 - 1 hidden layer ------ #
# Check to see if we are calling for one or two layers . If one layer then proceed
if param[3] == 1:
# hidden layer 1
q2model1.add(Dense(param[0]))
if param[1] != 'LeakyReLU':
q2model1.add(Activation(param[1]))
else:
q2model1.add(LeakyReLU(alpha=0.1))
# output layer
q2model1.add(Dense(class_num, activation='softmax'))
# ------ model 1 - 2 hidden layers ------ #
else:
# hidden layer 1
q2model1.add(Dense(param[0]))
if param[1] != 'LeakyReLU':
q2model1.add(Activation(param[1]))
else:
q2model1.add(LeakyReLU(alpha=0.1))
# hidden layer 2
q2model1.add(Dense(param[0]))
if param[1] != 'LeakyReLU':
q2model1.add(Activation(param[1]))
else:
q2model1.add(LeakyReLU(alpha=0.1))
# output layer
q2model1.add(Dense(class_num, activation='softmax'))
q2model1.compile(loss='sparse_categorical_crossentropy', optimizer='RMSProp',
metrics=['accuracy'])
history = q2model1.fit(X1, y1, epochs=20)