在Keras顺序API中,training =假

ryhaxcpt  于 2023-02-23  发布在  其他
关注(0)|答案(2)|浏览(165)

我们可以在使用Keras Functional API调用预训练模型时传递training = False参数,如本教程所示。
如何在Keras Sequential API中实现相同的功能?
下面是我尝试使用顺序API复制的代码:

inputs = tf.keras.Input( shape = ( TARGET_SIZE[0], TARGET_SIZE[1], 3 ) )
base_model = Xception( include_top = False, pooling = 'avg' )
base_model.trainable = False
x = base_model( inputs, training = False ) 
x = Dense( 512, activation = 'relu' )( x )
x = Dense( 256, activation = 'relu' )( x )
x = Dense( 128, activation = 'relu' )( x )
outputs = Dense( 6, activation = 'softmax' )( x )

以下是使用Sequential API实现整个模型 *(不含 * training = False)的代码,如下所示:

model = Sequential()
model.add( Xception( include_top = False, pooling = 'avg', input_shape = ( TARGET_SIZE[0], TARGET_SIZE[1], 3 ) ) )
model.add( Dense( units = 512, activation = 'relu' ) )
model.add( Dense( units = 256, activation = 'relu' ) )
model.add( Dense( units = 128, activation = 'relu' ) )
model.add( Dense( 6, activation = 'softmax' ) )

但是,我无法用它来压缩training = False的参数。

e7arh2l6

e7arh2l61#

你可以尝试以下,它为我工作:
加载任何基础模型,include_top = False,然后(作为示例):

flat1 = Flatten()(base_model.layers[-1].output, training=False)
    
 class1 = Dense(5, activation='relu')(flat1)
    
 output = Dense(1, activation='sigmoid')(class1) 

 model = Model(inputs=base_model.inputs, outputs=output)
iugsix8n

iugsix8n2#

我也在问自己同样的问题。不幸的是,我没有找到明确的解释。Here有关于迁移学习的Tensorflow指南。如您所见,只有在调用模型或层时才能使用training = False。因此,我意识到您需要使用您编写的第一个代码。

相关问题