繁体   English   中英

如何有条件地向Keras模型添加图层?

[英]How do i conditionally add layers to a Keras model?

这是我到目前为止所做的

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时添加一个隐藏层。 我可以走简单的路线,只是创建两个单独的模型,一个带有一个隐藏层,另一个带有两个隐藏层,然后分别遍历它们,但是我想做些更优雅的事情。

注意:我知道其中一些可能可以通过gridsearch完成,并且我知道隐藏的第1层和第2层将具有相同的参数。 最终,我将朝着能够分别调整它们的方向努力,但是目前为止我所描述的解决方案就足够了。

最终探索了@ 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM