簡體   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