Tf.keras và kera cho ra kết quả rất khác nhau

computer-vision

#1

Chào mọi người, trong group mình đã có ai thử dùng tf.keras và kera cho ra kết quả recognization rất khác nhau chưa? không biết nguyên nhân là do đâu, mình đã tìm hiểu thì trên github của keras cũng đã gặp trường hợp như vậy và chưa có câu trả lời thỏa đáng.

Dùng Keras

train_datagen = ImageDataGenerator(
                                                  rescale=1/255
                                                  ) # horizontal_flip = False, fill_mode = "nearest",
train_generator = train_datagen.flow_from_directory(
                                                  'real_train',  # this is the target directory
                                                  target_size=(IMAGE_SIZE, IMAGE_SIZE),  # all images will be resized to 150x150
                                                  batch_size=BATCH_SIZE,
                                                  class_mode='categorical',
                                                  shuffle=True)

validation_datagen = ImageDataGenerator(rescale=1./255)
validation_generator = validation_datagen.flow_from_directory(
                                                  'real_test',
                                                  target_size=(IMAGE_SIZE, IMAGE_SIZE),
                                                  batch_size=BATCH_SIZE,
                                                  class_mode='categorical',
                                                  shuffle=False)

from keras.optimizers import Adam

base_model = applications.MobileNet(include_top=False, weights='imagenet', input_shape=(IMAGE_SIZE,IMAGE_SIZE,3))
base_model.trainable = False
# for layer in model.layers[:30]:
#     layer.trainable = False

x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dropout(0.3)(x)
x = Dense(1024, activation='relu')(x)
preds=Dense(41, activation='softmax')(x)
model= Model(inputs=base_model.input,outputs=preds)    

model.compile(loss='categorical_crossentropy',
              optimizer=Adam(),
              metrics=['accuracy'])

Dùng tf.keras

train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(
                                                  rescale=1/255
                                                  ) # horizontal_flip = False, fill_mode = "nearest",
train_generator = train_datagen.flow_from_directory(
                                                  'real_train',  # this is the target directory
                                                  target_size=(IMAGE_SIZE, IMAGE_SIZE),  # all images will be resized to 150x150
                                                  batch_size=BATCH_SIZE,
                                                  class_mode='categorical',
                                                  shuffle=True)

validation_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
validation_generator = validation_datagen.flow_from_directory(
                                                  'real_test',
                                                  target_size=(IMAGE_SIZE, IMAGE_SIZE),
                                                  batch_size=BATCH_SIZE,
                                                  class_mode='categorical',
                                                  shuffle=False)

base_model = tf.keras.applications.MobileNet(include_top=False, weights='imagenet',input_shape=(IMAGE_SIZE,IMAGE_SIZE,3))

base_model.trainable = False
# for layer in base_model.layers:
#    layer.trainable = False
       
model = tf.keras.Sequential([
    base_model,
    layers.GlobalAveragePooling2D(),
    layers.Dropout(0.3),
    layers.Dense(1024, activation='relu'),
    layers.Dense(41, activation='softmax')
])


model.compile(
    optimizer=tf.keras.optimizers.Adam(),
    loss= 'categorical_crossentropy',
    metrics=['accuracy'])