函数来构建具有任意层数的Keras模型



我想看看当我改变模型的层数时会发生什么。

我编写了一个函数来构建、编译和拟合具有自定义层数的模型。但它每次都只使用一层(看起来像(构建一个(看起来(完全相同的模型。

代码

def custom_num_layer_model(num_layers):
dense_layers = [Dense(16, activation='relu')] * num_layers
all_layers = dense_layers + [Dense(1, activation='sigmoid')]
model = Sequential(all_layers)

model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])

history = model.fit(x_train,
y_train,
epochs=20,
batch_size=512,
validation_split=0.4)
return history

当我写这篇文章的时候,我意识到它一定是dense_layers = [Dense(16, activation='relu')] * num_layers行。这必须复制列表中的确切层,从而使副本变得无用。

那么,我该如何编写一个函数来自动构建具有自定义层数的模型?

想明白了!

在函数的第一行使用列表理解。

dense_layers = [Dense(16, activation='relu') for _ in range(num_layers)]

您必须初始化num_layers新对象,因此也可以使用for循环来执行此操作。

使用list * num_layers只会创建一个包含原始对象的num_layers副本的新列表。因为它是同一个对象,所以就像有一个单层网络。

使用列表理解创建num_layers不同的新对象,因此它是有效的。

最新更新