keras加载h5模型文件,进行图像分类任务的结果预测。

这是一个皮肤病8分类任务。首先展示类别名称列表:

classes_name_list=['AK','BCC','BKL','DF','MEL','NV','SCC','VASC']

以上代码表明,分类任务为8分类,标签分别为AK,BCC,BKL等等。

通过对DenseNet121进行迁移学习,将顶层修改为自己设计的8分类器,并在训练集上训练,(训练图像全部归一化为0-1范围内),获得训练好的模型:model.h5

加载该预训练模型:

import tensorflow as tf

model=tf.keras.models.load_model('model.h5')

 该模型结构如下图:

keras加载h5模型文件,进行图像分类任务的结果预测。_第1张图片

1.首先我们使用skimage模块来预处理图像:

加载待预测图像(皮肤病图像辣眼睛):

    import skimage

    filename=r'datasets\test\MEL\ISIC_0000013.jpg' 
   
    test_img=skimage.io.imread(filename) #加载测试图像,直接得到多维数组
    test_img=skimage.transform.resize(test_img,(224,224,3))  #根据模型输入尺寸要求,重定义大小
    test_img=np.expand_dims(test_img,0) #模型输入要求为四维张量,所以需要增加一个batch_size维度
    pred=model.predict(test_img) #将测试图像送入模型,进行预测
    print('预测结果:',end='')
    print(classes_name_list[pred.argmax()]) #输出类别预测结果
预测结果:MEL

2.接着换用keras自带的图像预处理模块进行预处理:

    import tensorflow as tf 

    filename=r'datasets\test\MEL\ISIC_0000013.jpg'
    
    test_img=tf.keras.preprocessing.image.load_img(filename,target_size=(224,224,3)) #此处得到的是pillow图像Image实例
    test_img=tf.keras.preprocessing.image.img_to_array(test_img) #将Image实例转化为多维数组
    test_img=test_img/255  #此处还需要将0-255转化为0-1
    test_img=np.expand_dims(test_img,0) #将三维输入图像拓展成四维张量
    pred=model.predict(test_img) #预测
    print('预测结果:',end='')
    print(classes_name_list[pred.argmax()])  #打印结果
预测结果:MEL

可以看出,使用skimage和keras自带的图像预处理模块都能实现准确预测,唯一不同是,skimage读取图像后自动转换为0-1范围,而keras中使用的需要手动转换0-255为0-1.

你可能感兴趣的:(迁移学习)