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

Function to build Keras model with arbitrary number of layers

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

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

代码

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 个不同的新对象,因此它有效。