Python 在TensorFlow 2.x中删除层/从特定层提取特征
我有一个训练有素的CNN模型,我用一个致密层作为顶部模型来进行预测。但是,现在我想使用倒数第二层来提取特征,但我无法删除最后一层 我试过了。爸爸,但那似乎不再有效了 我的模型如下: input_1(InputLayer)[(无、256、256、3)]0Python 在TensorFlow 2.x中删除层/从特定层提取特征,python,python-3.x,tensorflow,tensorflow2.0,Python,Python 3.x,Tensorflow,Tensorflow2.0,我有一个训练有素的CNN模型,我用一个致密层作为顶部模型来进行预测。但是,现在我想使用倒数第二层来提取特征,但我无法删除最后一层 我试过了。爸爸,但那似乎不再有效了 我的模型如下: input_1(InputLayer)[(无、256、256、3)]0 _________________________________________________________________efficientnet-b6(功能性)(无、8、8、2304)40960136 _________________
_________________________________________________________________efficientnet-b6(功能性)(无、8、8、2304)40960136
_________________________________________________________________全球平均池2D(Gl(无,2304)0
_________________________________________________________________密集型(密集型)(无,1)2305
==================================================================总参数:40962441可训练参数:0个不可训练参数: 40962441
我想去除致密部分。您可以采取以下步骤:
import tensorflow as tf
from tensorflow.keras import layers, models
def simpleMLP(in_size, hidden_sizes, num_classes, dropout_prob=0.5):
in_x = layers.Input(shape=(in_size,))
hidden_x = models.Sequential(name="hidden_layers")
for i, num_h in enumerate(hidden_sizes):
hidden_x.add(layers.Dense(num_h, input_shape=(in_size,) if i == 0 else []))
hidden_x.add(layers.Activation('relu'))
hidden_x.add(layers.Dropout(dropout_prob))
out_x1 = layers.Dense(num_classes, activation='softmax', name='baseline1')
out_x2 = layers.Dense(3, activation='softmax', name='baseline2')
return models.Model(inputs=in_x, outputs=out_x2(out_x1((hidden_x(in_x)))))
baseline_mdl = simpleMLP(28*28, [500, 300], 10)
print(baseline_mdl.summary())
模型:“功能性_1”
_________________________________________________________________
图层(类型)输出形状参数#================================================================= 输入_1(输入层)[(无,784)]0
_________________________________________________________________ 隐藏层(顺序)(无,300)542800
_________________________________________________________________ 基线1(密集)(无,10)3010
_________________________________________________________________ 基线2(密集)(无,3)33
================================================================= 总参数:545843 可培训参数:545843 不可训练参数:0 _________________________________________________________________ 模型:“功能性_3” _________________________________________________________________图层(类型)输出形状参数#
===========================================================================================input\u 1(InputLayer)[(None,784)]0
_________________________________________________________________隐藏层(顺序)(无,300)542800
_________________________________________________________________基线1(密集)(无,10)3010
==================================================================总参数:545810可训练参数:545810不可训练参数: 0
正如你所看到的,我去掉了最后一层,仍然能够使用经过训练的重量
请注意,根据您的型号可能会略有不同,但这是您应该遵循和调整的一般原则。@Alexandros当然,很乐意提供帮助!
baseline_in = baseline_mdl.layers[0].input
baseline_out = baseline_mdl.layers[-2].output
new_baseline = models.Model(inputs=baseline_in,
outputs=baseline_out)
print(new_baseline.summary())