我想看看当我改变模型的层数时会发生什么。
我编写了一个函数来构建、编译和拟合具有自定义层数的模型。但它每次都只使用一层(看起来像(构建一个(看起来(完全相同的模型。
代码
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
不同的新对象,因此它是有效的。