您可以采取以下步骤:
- 提取模型的层
- 获取输入层和所需的新输出层(在您的情况下是您想要的功能)
- 重建模型
一个强调它的例子是:
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())
型号:“functional_1”
_________________________________________________________________
图层(类型)输出形状参数 #
==================================================== ================
input_1 (InputLayer) [(无, 784)] 0
_________________________________________________________________
hidden_layers(顺序)(无,300)542800
_________________________________________________________________
基线1(密集)(无,10)3010
_________________________________________________________________
基线2(密集)(无,3)33
==================================================== ================
总参数:545,843
可训练参数:545,843
不可训练参数:0
_________________________________________________________________
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())
型号:“functional_3”
_________________________________________________________________ 图层(类型)输出形状参数 #
==================================================== =============== input_1 (InputLayer) [(None, 784)] 0
_________________________________________________________________ hidden_layers(顺序)(无,300)542800
_________________________________________________________________ 基线 1(密集)(无,10)3010
==================================================== =============== 总参数:545,810 可训练参数:545,810 不可训练参数:
0
如您所见,我删除了最后一层,仍然可以使用训练后的权重。
请注意,根据您的型号,它可能会略有不同,但这是您应该遵循和调整的一般原则。