Python isinstance()检查张量上的Keras层类型
我得到一个模型的预建Keras层列表,如下所示:Python isinstance()检查张量上的Keras层类型,python,tensorflow,input,keras,deep-learning,Python,Tensorflow,Input,Keras,Deep Learning,我得到一个模型的预建Keras层列表,如下所示: def build_model(layers): 我想构建一个Keras功能API模型a: model = Model(inputs, outputs) 因此,为了实现这一目标,我使用了: inputs = list() outputs = list() for layer in layers: if isinstance(layer, keras.layers.Input): inputs.append(layer)
def build_model(layers):
我想构建一个Keras功能API模型a:
model = Model(inputs, outputs)
因此,为了实现这一目标,我使用了:
inputs = list()
outputs = list()
for layer in layers:
if isinstance(layer, keras.layers.Input):
inputs.append(layer)
else:
outputs.append(layer)
但问题是,预构建的Keras输入层不再保存数据类型:Input,而是一个类似于so的张量:
张量(“输入1:0”,形状=(无,无,无),数据类型=浮点32)
有没有解决办法。不幸的是,函数签名无法更改,但是如果有解决方法,请告诉我(这里真的卡住了)
提前感谢。由于函数
isinstance
出现问题,我们可以使用层的名称来解决此问题
例如,让我们使用以下代码构建一个简单的模型:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Dropout, Input
from tensorflow import keras
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)
让我们使用命令,model.summary()
验证架构,如下所示:
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 32)] 0
_________________________________________________________________
dense_1 (Dense) (None, 16) 528
=================================================================
Total params: 528
Trainable params: 528
Non-trainable params: 0
layers = model.layers
inputs = []
outputs = []
for layer in layers:
# Check if a Layer is an Input Layer using its name
if 'input' in layer.name:
inputs.append(layer)
else:
outputs.append(layer)
print('Inputs List is ', inputs)
print('Outputs List is ', outputs)
如果我们观察图层名称,Input Layer
的前缀为Input
或者换句话说,代码
print('Name of First Layer is ', layers[0].name)
print('Name of Second Layer is ', layers[1].name)
导致
Name of First Layer is input_2
Name of Second Layer is dense_1
因此,我们可以修改我们的逻辑,如下所示:
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 32)] 0
_________________________________________________________________
dense_1 (Dense) (None, 16) 528
=================================================================
Total params: 528
Trainable params: 528
Non-trainable params: 0
layers = model.layers
inputs = []
outputs = []
for layer in layers:
# Check if a Layer is an Input Layer using its name
if 'input' in layer.name:
inputs.append(layer)
else:
outputs.append(layer)
print('Inputs List is ', inputs)
print('Outputs List is ', outputs)
上述代码的输出为:
Inputs List is [<tensorflow.python.keras.engine.input_layer.InputLayer object at 0x7fef788154e0>]
Outputs List is [<tensorflow.python.keras.layers.core.Dense object at 0x7fef78845fd0>]
输入列表为[]
输出列表为[]
希望这有帮助。学习愉快 您好@Ramsha Siddiqui,请提供更多关于您的模型的详细信息以及最低可复制代码。您好!是的,这就是我最后使用的。谢谢分享!