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