用tensorflow2训练两个模型,其中一个模型A我已经训练好了,我希望在训练另外一个模型B的时候,用到A的输出,我的代码如图,其中out = classifier(out)就是用到了A模型,我想知道在训练过程中加载进来的模型参数会受反向传播的影响改变吗,或者说我需要如何冻结classifier(A模型)的参数,请大佬解惑!感谢
def gen_cnn(input_shape):
input = Input(shape=input_shape)
i1 = Conv2D(4, (1, 1), strides=(1,1), padding='same', name='conv0', activation=None)(input)
a = Conv2D(4, (1, 4), strides=(1,2), padding='same', name='conv1', activation=None)(i1)
b = Conv2D(8, (1, 4), strides=(1,2), padding='same', name='conv2', activation=None)(a)
c = Conv2D(16, (1, 2), strides=(1,2), padding='same', name='conv3', activation=None)(b)
d = Conv2DTranspose(4, (1, 8), strides=(1,2), padding='same', name='deconv1', activation=None)(c)
d = concatenate([d,b], axis=3)
e = Conv2DTranspose(4, (1, 8), strides=(1,2), padding='same', name='deconv2', activation=None)(d)
e = concatenate([e,a], axis=3)
f = Conv2DTranspose(1, (1, 8), strides=(1,2), padding='same', name='deconv3', activation=None)(e)
f = concatenate([f,i1], axis=3)
out = Conv2D(1, (1, 1), strides=(1,1), padding='same', name='conv4', activation=None)(f)
out = classifier(out)
model = tf.keras.models.Model(inputs=input, outputs=out, name='functional')
# model = tf.keras.models.Model(inputs=input, outputs=decode, name='functional')
return model
望采纳
您可以使用 model.trainable = False 来冻结模型A的参数。您可以在定义模型A时将其赋值给一个变量,然后在定义模型B时使用这个变量来调用模型A:
# 定义模型A
classifier = gen_cnn(input_shape)
classifier.trainable = False
# 定义模型B,并使用模型A的输出
input = Input(shape=input_shape)
...
out = classifier(out)
model = tf.keras.models.Model(inputs=input, outputs=out, name='functional')
# model = tf.keras.models.Model(inputs=input, outputs=decode, name='functional')
return model