keras的inception_v3是个图片进行分类模型,使用keras简单调用内置的inception_v3模型非常简单,只需要一行代码:
#导入所需要的库
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions
import numpy as np
#下载、读取预训练模型,创建模型实例
model = tf.keras.applications.inception_v3.InceptionV3()
运行后报错:无法下载预训练模型
报错
Exception: URL fetch failure on https://github.com/fchollet/deep-learning-models/releases/download/v0.5/inception_v3_weights_tf_dim_ordering_tf_kernels.h5: None -- [Errno 111] Connection refused
以上语句可以自行下载预训练模型,但是由于墙的原因,在国内运行会导致报错。
解决方法:
由于程序的运行顺序是先检查keras的缓存文件夹里有没有对应文件,如果没有才会去下载,所以可以预先下载预训练模型并放入缓存文件夹,跳过下载的过程。
下载链接
链接:https://pan.baidu.com/s/1PJXqL-dUbjRw69dE5tBIDg
提取码:y3tq
压缩包中包括:
inception_v3_weights_tf_dim_ordering_tf_kernels.h5 #预训练模型文件
inceptionv3.py #示例代码
cropped_panda.jpg #示例图片
将下载下来的模型文件:inception_v3_weights_tf_dim_ordering_tf_kernels.h5,放到缓存文件夹即可。
我的系统是ubuntu缓存文件夹是:/home/用户名/.keras/models
Windows系统的缓存文件夹应该是:C:\Users\用户名.keras\models
使用模型分类图片
这里使用了一张熊猫的图片cropped_panda.jpg作为输入示例,完整代码为:
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions
import numpy as np
if __name__=='__main__':
#下载、读取预训练模型,创建模型实例
model = tf.keras.applications.inception_v3.InceptionV3()
#读取输入图片,模型默认图片输入大小为(299,299)
img_path = "cropped_panda.jpg"
img = image.load_img(img_path, target_size=(299, 299))
# 图片预处理
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
#预测
preds = model.predict(x)
#将预测结果解码成(类别、描述、概率)的元组
decode_predictions(preds, top=3)
print('Predicted:', decode_predictions(preds, top=3)[0])
最终输出为:
Predicted:
[(‘n02510455’, ‘giant_panda’, 0.81923896),
(‘n02500267’, ‘indri’, 0.008909277),
(‘n04266014’, ‘space_shuttle’, 0.0051425514)]
可以看到结果输出了概率最大的三个类别,其中giant_panda类别概率最大,说明本示例中,结果正确。