1

我试图弄清楚使用来自 tensorflow hub 的预训练模型与使用来自 tf.keras.applications 的完全相同的架构之间有什么区别。我已经尝试训练 2 个具有相同架构的模型 - 一个来自 tf hub,另一个来自 tf.keras.applications,这应该会产生可比较的结果,但是结果却大不相同。你能解释一下区别吗?

以下是这两种模型的示例。

base_model = tf.keras.applications.EfficientNetB0(include_top = False)
base_model.trainable = False
 
inputs = Input(shape = (224,224,3), name = 'input_layer')
x = base_model(inputs, training = False)
x = GlobalAveragePooling2D(name = 'global_avg_pool_layer')(x)
outputs = Dense(len(class_names), activation = 'softmax', name = 'output_layer')(x)
 
model_1 = tf.keras.Model(inputs, outputs)
 
model_1.compile(loss = 'categorical_crossentropy', optimizer = Adam(), metrics = ['accuracy'])
 
history_1 = model_1.fit(train_data_all_10_percent,
                        epochs = 10,
                        validation_data = test_data,
                        validation_steps = (0.15 * len(test_data)))

第二个

efficientnet_url = 'https://tfhub.dev/tensorflow/efficientnet/b0/feature-vector/1'
 
def create_model(model_url, num_classes = 10):
  feature_extractor_layer = hub.KerasLayer(model_url, trainable = False, name = 'feature_extraction_layer', input_shape = IMG_SIZE + (3,))
  model = Sequential([
                      feature_extractor_layer,
                      Dense(len(class_names), activation = 'softmax', name = 'output_layer')
  ])
  return model
 
efficientnet_model = create_model(efficientnet_model , num_classes = len(class_names))
efficientnet_model .compile(loss = 'categorical_crossentropy',  optimizer = Adam(), metrics = ['accuracy'])
efficientnet_history = efficientnet_model .fit(train_data_all_10_percent, 
                 epochs = 10,
                 validation_data = test_data, 
                 validation_steps = 0.15 * len(test_data))
4

0 回答 0