[英]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.