【问题标题】:Test h5 model on Test Dataset在测试数据集上测试 h5 模型
【发布时间】:2021-12-23 07:49:34
【问题描述】:

使用迁移学习进行二元分类。我使用我的数据集训练模型,该数据集已分为三个文件夹 - 训练、测试、验证。其中每一个进一步包含每个类的单独文件夹。

r = model.fit_generator(
  training_set,
  validation_data = val_set, 
  epochs=5,
  steps_per_epoch=len(training_set),
  validation_steps=len(test_set)
)

训练后,我将模型保存为 h5 文件。

import tensorflow as tf

from keras.models import load_model

model.save('vgg16_new_model.h5')

如何使用它在测试集上测试模型?

【问题讨论】:

    标签: python tensorflow keras deep-learning neural-network


    【解决方案1】:

    有一个等效于 fit_generator 的名称 evaluate_generator,当您想将测试数据集传递给经过训练的模型时,可以使用它。但是,这两个选项在最新的Tensorflow 版本中都已弃用,因此只需使用model.fitmodel.evaluate。这是一个简单的例子:

    import tensorflow as tf
    
    flowers = tf.keras.utils.get_file(
        'flower_photos',
        'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
        untar=True)
    
    img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=20)
    
    model = tf.keras.applications.vgg16.VGG16(include_top=False, input_shape=(256, 256, 3))
    x = tf.keras.layers.Flatten()(model.layers[-1].output)
    x = tf.keras.layers.Dense(1024, activation='relu')(x)
    output = tf.keras.layers.Dense(5)(x)
    model = tf.keras.Model(inputs=model.inputs, outputs=output)
    model.summary()
    
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])
    
    epochs=1
    model.fit(img_gen.flow_from_directory(flowers, batch_size=32, class_mode='sparse'),  epochs=epochs)
    model.save('vgg16_new_model.h5')
    
    ##############################################################
    new_model = tf.keras.models.load_model('vgg16_new_model.h5')
    results = new_model.evaluate(img_gen.flow_from_directory(flowers, batch_size=32, class_mode='sparse'))
    tf.print('Accuracy: ', results[1]*100)
    
    Found 3670 images belonging to 5 classes.
    115/115 [==============================] - 73s 629ms/step - loss: 1.6048 - accuracy: 0.2447
    Accuracy:  24.468664824962616
    

    请注意,我使用相同的子集进行训练和评估,但您会将测试集传递给 model.evaluate

    【讨论】:

    • 非常感谢!
    • 是否有类似的方法来计算 F1 分数、精度和召回率?
    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多