Концентратор тензорного потока против tf.keras.приложения для обучения передаче

#python #tensorflow #keras #transfer-learning #efficientnet

Вопрос:

Я пытаюсь понять, в чем разница между использованием предварительно подготовленной модели из 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))