从数据集随即选取图片于图片框中展示
import numpy as np
import utils
import cv2
from keras import backend as K
from vgg import VGG16
import matplotlib.pyplot as plt
K.set_image_data_format('channels_last')
class_classification = ["cat", "dog"]
if __name__ == "__main__":
model = VGG16(2)
# VGG输出两个类
model.load_weights("./logs/last1.h5")
#读取权重
# img = cv2.imread("./data/train/cat.1.jpg")
# img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# img = img/255
# img = np.expand_dims(img,axis = 0)
# img = utils.resize_image(img,(224,224))
# utils.print_answer(np.argmax(model.predict(img)))
# print(utils.print_answer(np.argmax(model.predict(img))))
# print(class_classification[np.argmax(model.predict(img))])
# show
#打开标签和数据集的文本,文本内的格式如下
with open("./data/train.txt", "r") as f:
lines = f.readlines()
np.random.shuffle(lines)
#随机打乱
plt.figure(figsize=(10, 10))
#给plt设置长宽
for i in range(9):
plt.subplot(3, 3, i+1)
num = int(np.random.random() * len(lines))
name = lines[num].split(';')[0]
img = cv2.imread("./data/train" + '/' + name)
img_input = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_input = img_input / 255
img_input = np.expand_dims(img_input, axis=0)
img_input = utils.resize_image(img_input, (224, 224))
predit = class_classification[np.argmax(model.predict(img_input))]
plt.title("label=%s predit=%s"%(name.split(".")[0], predit))
plt.imshow(img)
#plt.imshow(cv2.resize(img,(224,224)))
plt.axis('off')
plt.show()
题解
1.这里首先输入数据格式是通道在最后的
K.set_image_data_format('channels_last')
2 "./data/train.txt"内文本样式,也是根据数据集做出来的;之前为文件名,之后为标签1为dog0为猫
3utils.resize_image(img_input, (224, 224))
这里是把图形shape改为(1,224,224,3)具体的代码在utils里