在keras中对单一输入图像进行预测并返回预测结果操作


Posted in Python onJuly 09, 2020

模型经过训练测试之后,我们往往用一两张图对模型预测结果进行分析讨论,那么下面介绍在keras中用已训练的模型经过测试的方法。

下面是以利用预训练的ResNet来展示预测的效果,选了一张狗的图片,是来自一个kaggle比赛的。

预测结果第一个是一种苏格兰品种的狗,我也不知道准不准 == 。

在keras中对单一输入图像进行预测并返回预测结果操作

import numpy as np
from keras.applications.imagenet_utils import decode_predictions
from keras.preprocessing import image
from keras.applications import *
 
import os
 
# 忽略硬件加速的警告信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
 
file_path = 'images/0a70f64352edfef4c82c22015f0e3a20.jpg'
 
img = image.load_img(file_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
 
model = ResNet50(weights='imagenet')
y = model.predict(x)
# print(np.argmax(y))
print('Predicted:', decode_predictions(y, top=3)[0])

讲几点:

1.输入img转成numpy数组,shape处理成(224,224,3)一般来讲,对于预训练模型是有一个最小的尺寸值,比最小尺寸大就可以了。在ResNet中,尺寸最小大于等于197即可。

2.要对输入shape扩维变成(None,224,224,3),第一个None是batches,模型并不知道你输入的batches是多少,但是维度必须和ResNet的输入要一致。

3.虽然用的是ResNet,自己设计的模型也一个道理,保留一下训练的权重,把model模块和预测模块分开写,这个时候load一下权重,再预测即可。

补充知识:keras:怎样使用 fit_generator 来训练多个不同类型的输出

这个例子非常简单明了,模型由1个输入,2个输出,两个输出的分支分别使用MSE作为损失。

x = Convolution2D(8, 5, 5, subsample=(1, 1))(image_input)
x = Activation('relu')(x)
x = Flatten()(x)
x = Dense(50, W_regularizer=l2(0.0001))(x)
x = Activation('relu')(x)

output1 = Dense(1, activation='linear', name='output1')(x)
output2 = Dense(1, activation='linear', name='output2')(x)

model = Model(input=image_input, output=[output1, output2])
model.compile(optimizer='adam', loss={'output1': 'mean_squared_error', 'output2': 'mean_squared_error'})

产生训练数据的生成器,这里y=[y1,y2].

batch_generator(x, y, batch_size):
  ....transform images
  ....generate batch batch of size: batch_size 
  yield(X_batch, {'output1': y1, 'output2': y2} ))

之后,调用fit_generator

model.fit_generator(batch_generator(X_train, y_train, batch_size))

原问题链接。

以上这篇在keras中对单一输入图像进行预测并返回预测结果操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
总结Python编程中函数的使用要点
Mar 20 Python
python如何对实例属性进行类型检查
Mar 20 Python
python随机取list中的元素方法
Apr 08 Python
Python3多线程操作简单示例
May 22 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
关于tf.reverse_sequence()简述
Jan 20 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
python求解汉诺塔游戏
Jul 09 #Python
Django中Aggregation聚合的基本使用方法
Jul 09 #Python
Python  word实现读取及导出代码解析
Jul 09 #Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 #Python
实例讲解Python 迭代器与生成器
Jul 08 #Python
opencv 阈值分割的具体使用
Jul 08 #Python
如何表示python中的相对路径
Jul 08 #Python
You might like
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
移动端效果之Swiper详解
2017/10/09 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Python实现图片转字符画的示例代码
2017/08/21 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
C# .NET面试题
2015/11/28 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
运动会稿件50字
2014/02/17 职场文书
花坛标语大全
2014/06/30 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
《青山不老》教学反思
2016/02/22 职场文书
《植树问题》教学反思
2016/03/03 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
Redis入门教程详解
2021/08/30 Redis