Python 如何展平嵌套模型?(keras功能API)
我使用keras模型函数API定义了一个简单的模型。它的一个层是一个完全连续的模型,所以我得到了一个嵌套的层结构(见下图) 如何将此嵌套层结构转换为平面层结构?(使用脚本,而不是手动…)Python 如何展平嵌套模型?(keras功能API),python,tensorflow,keras,Python,Tensorflow,Keras,我使用keras模型函数API定义了一个简单的模型。它的一个层是一个完全连续的模型,所以我得到了一个嵌套的层结构(见下图) 如何将此嵌套层结构转换为平面层结构?(使用脚本,而不是手动…) 我所拥有的: 我想将其转换为: 生成嵌套层结构的代码: def create_network_with_one_subnet(): # define subnetwork subnet = keras.models.Sequential() subnet.add(keras.la
我所拥有的: 我想将其转换为:
生成嵌套层结构的代码:
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
啊,比预想的容易多了。在谷歌搜索正确的关键字后,解决方案如下:
处理具有多个级别的嵌套模型的更好解决方案:
def flatten_model(model_nested):
def get_layers(layers):
layers_flat = []
for layer in layers:
try:
layers_flat.extend(get_layers(layer.layers))
except AttributeError:
layers_flat.append(layer)
return layers_flat
model_flat = tfk.models.Sequential(
get_layers(model_nested.layers)
)
return model_flat
什么是tfk?tensorflow.kerashis不适用于连接/添加层!!!
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
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
def flatten_model(model_nested):
def get_layers(layers):
layers_flat = []
for layer in layers:
try:
layers_flat.extend(get_layers(layer.layers))
except AttributeError:
layers_flat.append(layer)
return layers_flat
model_flat = tfk.models.Sequential(
get_layers(model_nested.layers)
)
return model_flat