我有一个经过训练的基于EfficientNetB0的模型,其中保存了H5格式的权重。
我想在模型之前添加一些预处理层,加载权重,并重新训练它。
如果我创建一个这样的模型:
inp = tf.keras.layers.Input(shape=[224,224,3])
noise = tf.keras.layers.GaussianNoise(stddev=10.)(inp)
feature_extractor = tf.keras.applications.EfficientNetB0(include_top=False, pooling="max")
features = feature_extractor(noise)
output1 = tf.keras.layers.Dense(100, activation="sigmoid")(features)
output2 = tf.keras.layers.Dense(10, activation="softmax")(output1)
model = tf.keras.models.Model(inp, [output1, output2])
我得到这样的总结:
Layer (type) Output Shape Param #
=================================================================
input_27 (InputLayer) [(None, 224, 224, 3)] 0
_________________________________________________________________
gaussian_noise_13 (GaussianN (None, 224, 224, 3) 0
_________________________________________________________________
efficientnetb0 (Functional) (None, 1280) 4049571
_________________________________________________________________
dense (Dense) (None, 100) 128100
_________________________________________________________________
dense_1 (Dense) (None, 10) 1010
并且无法访问中间层。我不能使用tf.keras.Sequential
方法,因为我的模型有两个输出。
我想保留EfficientNetB0中的图层名称,以便重新加载权重。该如何操作?
1条答案
按热度按时间pcww981p1#
因此,对于我在上面创建的玩具示例,答案似乎是:
然而,我实际上使用的是一个自定义模型类,它在构造函数中没有那个参数...
如果没有
input_tensor
参数,是否有其他方法可以实现此目的?