gpt4 book ai didi

python - 如何展平嵌套模型? (keras 函数式 API)

转载 作者:行者123 更新时间:2023-12-05 09:14:11 25 4
gpt4 key购买 nike

我使用 keras 模型功能 API 定义了一个简单的模型。它的其中一层是一个完全顺序的模型,所以我得到了一个嵌套的层结构(见下图)。

如何将这种嵌套层结构转换为平面层结构? (用脚本,不是手动...)


我有: Nested layer structure

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 32, 32, 1) 0
_________________________________________________________________
sequential_1 (Sequential) (None, 8, 8, 12) 720
_________________________________________________________________
flatten_1 (Flatten) (None, 768) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 769
=================================================================

我想将其转换为: Flat layer structure

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 32, 32, 1) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 6) 60
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 16, 16, 6) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 6) 330
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 8, 8, 6) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 384) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 385
=================================================================

生成嵌套层结构的代码:

def create_network_with_one_subnet():
# define subnetwork
subnet = keras.models.Sequential()
subnet.add(keras.layers.Conv2D(6, (3, 3), padding='same'))
subnet.add(keras.layers.MaxPool2D())
subnet.add(keras.layers.Conv2D(12, (3, 3), padding='same'))
subnet.add(keras.layers.MaxPool2D())
#subnet.summary()


# define complete network
input_shape = (32, 32, 1)
net_in = keras.layers.Input(shape=input_shape)
net_out = subnet(net_in)
net_out = keras.layers.Flatten()(net_out)
net_out = keras.layers.Dense(1)(net_out)
net_complete = keras.Model(inputs=net_in, outputs=net_out)
net_complete.compile(loss='binary_crossentropy',
optimizer=keras.optimizers.Adam(lr=0.001),
metrics=['acc'],
)
net_complete.summary()
return net_complete

最佳答案

啊,比想象中容易多了。谷歌搜索正确关键字后的解决方案:https://groups.google.com/forum/#!msg/keras-users/lJcVK25YDuc/atB6TfwqBAAJ

def flatten_model(model_nested):
layers_flat = []
for layer in model_nested.layers:
try:
layers_flat.extend(layer.layers)
except AttributeError:
layers_flat.append(layer)
model_flat = keras.models.Sequential(layers_flat)
return model_flat

关于python - 如何展平嵌套模型? (keras 函数式 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54648296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com