使用VGG模型进行预测
VGG整个模型已经写好了,我们直接用一张图片来进行预测,查看预测的类别是否正确和准确率是否很高。
我们用tf.keras.applications.vgg16中引用VGG16模型、preprocess_input、decode_predictions。VGG16模型中包括整个网络,preprocess_input对四维数组进行预处理,decode_predictions对预测结果进行解码得到标签。
1.导入相关的库
from tensorflow.keras.applications.vgg16 import VGG16,preprocess_input,decode_predictions
from tensorflow.keras.preprocessing.image import load_img, img_to_array
import matplotlib.pyplot as plt
2.导入模型
model = VGG16()
#model = VGG16(weights = 'imagenet', include_top = False) 不包括全连接层
model.summary()
3.导入图片进行预测
3.1导入图片
img = load_img(path = 'C:/Users/86199/Desktop/python_code/pillow图像处理/东北虎.jfif',
target_size=(224, 224))
plt.imshow(img, 'gray')
plt.axis('off')
plt.show()
3.2 将图片转化为数组并升维
img = img_to_array(img)
img = img.reshape((1,img.shape[0], img.shape[1], img.shape[2]))
3.3 对图片进行归一化处理并预测
img = preprocess_input(img)
y_predictions = model.predict(img)
3.4 对结果进行解码
label = decode_predictions(y_predictions)
print(label)
以上打印的结果是两个列表。
3.5 输入预测的类别和概率
print('预测的类别是%s,并且预测的概率为%f'%(label[0][0][1],label[0][0][2]))
预测的类别是tiger,并且预测的概率为0.949506
4.总结
4.1 完整代码
#使用pre_trained模型进行VGG测试,在keras.appliactions中有很多模型。
from tensorflow.keras.applications.vgg16 import VGG16,preprocess_input,decode_predictions
from tensorflow.keras.preprocessing.image import load_img, img_to_array
import matplotlib.pyplot as plt
model = VGG16() #model = VGG16(weights = 'imagenet', include_top = False) 不包括全连接层
img = load_img(path = 'C:/Users/86199/Desktop/python_code/pillow图像处理/东北虎.jfif',
target_size=(224, 224))
plt.imshow(img, 'gray')
plt.axis('off')
plt.show()
img = img_to_array(img)
img = img.reshape((1,img.shape[0], img.shape[1], img.shape[2]))
#在预测之前,我们要对图片进行归一化处理
img = preprocess_input(img)
y_predictions = model.predict(img)
#print(y_predictions)
#对对应的结果进行解码
label = decode_predictions(y_predictions)
print(label)
print('预测的类别是%s,并且预测的概率为%f'%(label[0][0][1],label[0][0][2]))
#print(label)
#model.summary()