python识别简单训练模型_使用已经得到的keras模型识别自己手写的数字方式

环境:Python+keras,后端为Tensorflow

训练集:MNIST

对于如何训练一个识别手写数字的神经网络,网上资源十分丰富,并且能达到相当高的精度。但是很少有人涉及到如何将图片输入到网络中并让已经训练好的模型惊醒识别,下面来说说实现方法及注意事项。

首先import相关库,这里就不说了。

然后需要将训练好的模型导入,可通过该语句实现:

model = load_model('cnn_model_2.h5') (cnn_model_2.h5替换为你的模型名)

之后是导入图片,需要的格式为28*28。可用opencv导入:

img = cv2.imread('temp3.png', 0) (temp3.png替换为你手写的图片)

然后reshape一下以符合模型的输入要求:

img = (img.reshape(1,1,28,28)).astype("float32")/255

之后就可以用模型识别了:

predict = model.predict_classes(img)

最后print一下predict即可。

下面划重点:因为MNIST使用的是黑底白字的图片,所以你自己手写数字的时候一定要注意把得到的图片也改成黑底白字的,否则会识别错(至少我得到的结论是这样的 ,之前用白底黑字的图总是识别出错)

源码一览:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import cv2

import numpy as np

from keras.modelsimport load_model

model= load_model('cnn_model_2.h5')

image= cv2.imread('temp3.png',0)

img= cv2.imread('temp3.png',0)

img= (img.reshape(1,1,28,28)).astype("float32")/255

predict= model.predict_classes(img)

print ('识别为:')

print (predict)

cv2.imshow("Image1", image)

cv2.waitKey(0)

效果图:

1-2006301010025a.jpg

补充知识:keras编写自定义的层

写在前面的话

keras已经有很多封装好的库供我们调用,但是有些时候我们需要的操作keras并没有,这时就需要学会自定义keras层了

1.Lambda

这个东西很方便,但是只能完成简单、无状态的自定义操作,而不能建立含有可训练权重的自定义层。

1

2

3

4

5

6

7

8

9

from keras.layersimport Input,Lambda

from kerasimport Model

import tensorflow as tf

input=Input(shape=(224,224,3))

input.shape#Input第一个维度为batchsize维度

output=Lambda(lambda x: x[...,1])(input)#取最后一个维度的数据,...表示前面所有的维度

Model=Model(inputs=input,outputs=output)

Model.output

2.keras_custom

学习自keras中文文档

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

2.自定义keras层(带有可训练权重)

① build:定义权重,且self.build=True,可以通过迪奥哟经super([layer],self).build()完成

② call:功能逻辑实现

③ compute_output_shape:计算输出张量的shape

import keras.backend as K

from keras.engine.topologyimport Layer#这里的Layer是一个父类,下面的MyLayer将会继承Layer

class MyLayer(Layer):#自定义一个keras层类

def __init__(self,output_dim,**kwargs):#初始化方法

self.output_dim=output_dim

super(MyLayer,self).__init__(**kwargs)#必须要的初始化自定义层

def build(self,input_shape):#为Mylayer建立一个可训练的权重

#通过add_weight的形式来为Mylayer创建权重矩阵

self.kernel=self.add_weight(name='kernel',

shape=(input_shape[1],self.output_dim),#这里就是建立一个shape大小的权重矩阵

initializer='uniform',

trainable=True)

super(MyLayer,self).build(input_shape)#一定要用,也可以用下面一行

#self.build=True

def call(self,x):#call函数里就是定义了对x张量的计算图,且x只是一个形式,所以不能被事先定义

return K.dot(x,self.kernel)#矩阵乘法

def compute_output_shape(self,input_shape):

return (input_shape[0],self.output_dim)#这里是自己手动计算出来的output_shape

--------------------------------------------------------------------------------

class Mylayer(Layer):

def __init__(self,output_dim,**kwargs):

self.output_dim=output_dim

super(MyLayer,self).__init__(**kwargs)

def build(self,input_shape):

assert isinstance(input_shape,list)#判断input_shape是否是list类型的

self.kernel=self.add_weight(name='kernel',

shape=(input_shape[0][1],self.output_dim),#input_shape应该长得像[(2,2),(3,3)]

initializer='uniform',

trainable=True)

super(MyLayer,self).build(input_shape)

def call(self,x):

assert isinstance(x,list)

a,b=x#从这里可以看出x应该是一个类似[(2,2),(3,3)]的list,a=(2,2),b=(3,3)

return [K.dot(a,self.kernel)+b,K.mean(b,axis=-1)]

以上这篇使用已经得到的keras模型识别自己手写的数字方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/baidu_35113561/article/details/79371716

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程旭元系统漫画第三期:加班 !

对于苦逼的程旭元来说 加班已经变成了生活中不可缺少的部分 他的原则是不能像胖子那样贪吃 不能像销售员那样狡诈 一定要尽忠职守 精忠报国 !老板说什么他就做什么! 对于一个从来只说加班不加工资的boss来说 唯命是从就是存活在公司的最好方式~ 但是有…

python 的库如何开发_一篇文章入门Python生态系统

译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍。文中提到了一些第三方库,但是Pyth…

Nginx编译安装和平滑升级

一、Nginx的编译安装 1、安装依赖包gcc,gcc-c,pcre,openssl-devel 命令:yum -y install gcc gcc-c pcre-devel openssl-devel 2、下载Nginx源码包 Nginx下载地址:http://nginx.org/download/nginx-1.12.2.tar.gz …

android ListView详解

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。 列表的显示需要三个元素:1.ListVeiw …

Nginx网站用户认证

一、Nginx网站用户认证 用户认证:用户访问网页时需要输入一个用户名和密码才能打开网页。 nginx的默认网页时安装目录下的html/index.html,配置文件在安装目录下的conf目录中的nginx.conf 无用户认证网页 修改配置文件/usr/local/nginx/conf/nginx.conf(…

Nginx基于域名的虚拟主机

一、基于域名的虚拟主机 修改配置文件/usr/local/nginx/conf/nginx.conf 创建新的虚拟主机的根目录和默认网页index.html 重新加载nginx的配置文件 查看两个虚拟主机 因为这两个域名是随便写的,所以需要修改windows系统的hosts文件,让电脑能够解析www.a.…

【100题】第三十四 实现一个队列

一,题目: 生产者消费者线程演示 一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列 二,分析: 这一个,为操作系统上的一个经典例子,以下是july给出的解答 …

如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?

当我们进行机器人开发时,常常需要面对TF坐标转换,本文以 Autolabor Pro1 与思岚激光雷达为例,介绍ROS TF的使用。Autolabor Pro1是什么?Autolabor Pro1是一款室内外通用机器人移动底盘。该平台上可集成激光雷达、摄像头、GPS等传感…

Tomcat架构与原理

Tomcat架构与原理 架构图 原理 ①、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。 ②、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。 ③、Engine获得请求localhos…

c语言转换为python语言_python和c语言

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! c语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速…

COJ1196(Staginner 去爬山)

题目大意:给定一个n*m的只含0和1的矩阵,从矩阵的最后一行中的某个1出发,每步只能走到相邻的且是1的格子中,求能达到的最大高度(最小行数)。 这题直接DFS即可,复杂度为O(N*M)。 View Code 1 #in…

python网站模板下载_Python画图模板大全:从此画图不用愁

1、matplotlib具体参数介绍: 在介绍Python画图模板之前,先买个和大家卖个官司,首先介绍一下Python画图常用库matplotlib的参数,如果只介绍模板,如果你想改一些参数,首先要知道各个参数的含义,那…

二进制安装mysql-5.7.26

一、上传二进制 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz包 #/data 是数据盘 自己根据情况定 [rootVM_0_10_centos data]# pwd/datatar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gzmv mysql-5.7.26-linux-glibc2.12-x86_64 mysql #做软连接 ln -s /data/mysql /usr/lo…

python给矩阵赋值_解决Python二维数组赋值问题

解决Python二维数组赋值问题 当我们采用s[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值。因为用s [[0]*3]*2 初始化数组,他表示的是指向这个列表的引用,所以当你修改一个值的时候,整个列表都…

python自增_python mysql自增字段AUTO_INCREMENT值的修改方式

在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始。 但是我们显示想…

springboot security 权限不足_springBoot整合springSecurity(零一)

整体结构》》》1,springboot2.0整合springSecurity5.1.12,mysql--->>InnoDB3,持久层我用的是用MybatiysPlus(这里就不写关于这个的了,基本是查)4,web服务不是jar服务5,数据库表》账户表/角色表/权限表/账户角色关…

zabbix基础之环境搭建

zabbix入门 环境部署 安装mysql #安装MySQL,官方的MySQL的repo源地址:http://repo.mysql.com/ #选择指定的MySQL版本,我这里选mysql5.7的版本,复制对应版本的链接地址。 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch…

新版个人所得税计算python_最新个税计算 / 个税计算器 小程序 wepy 开发

根据最新税改后计算个人所得税的计算器。 如有其它疑惑,也欢迎提出任何修改意见。可以在主题下留言或者在小程序中点击联系在线客服或者加入qq群:869113926 1、扫一扫2、效果图这次开发遇到几个问题因此记录下来。 (1)、在开发微信小程序组件框架时&…

Google Analytics 搜索引擎来源

转载于:https://www.cnblogs.com/dabaopku/archive/2012/05/08/2490164.html

python 图片 变清晰_python实现图片变亮或者变暗的方法

python实现图片变亮或者变暗的方法 这篇文章主要介绍了python实现图片变亮或者变暗的方法,涉及Python中Image模块操作图片的相关技巧,分享给大家供大家参考。具体实现方法如下: import Image # open an image file (.jpg or.png) you have in the working folder im…