日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/10 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python识别简单训练模型_使用已经得到的keras模型识别自己手写的数字方式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(huán)境:Python+keras,后端為Tensorflow

訓(xùn)練集:MNIST

對(duì)于如何訓(xùn)練一個(gè)識(shí)別手寫數(shù)字的神經(jīng)網(wǎng)絡(luò),網(wǎng)上資源十分豐富,并且能達(dá)到相當(dāng)高的精度。但是很少有人涉及到如何將圖片輸入到網(wǎng)絡(luò)中并讓已經(jīng)訓(xùn)練好的模型驚醒識(shí)別,下面來(lái)說(shuō)說(shuō)實(shí)現(xiàn)方法及注意事項(xiàng)。

首先import相關(guān)庫(kù),這里就不說(shuō)了。

然后需要將訓(xùn)練好的模型導(dǎo)入,可通過(guò)該語(yǔ)句實(shí)現(xiàn):

model = load_model('cnn_model_2.h5') (cnn_model_2.h5替換為你的模型名)

之后是導(dǎo)入圖片,需要的格式為28*28。可用opencv導(dǎo)入:

img = cv2.imread('temp3.png', 0) (temp3.png替換為你手寫的圖片)

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

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

之后就可以用模型識(shí)別了:

predict = model.predict_classes(img)

最后print一下predict即可。

下面劃重點(diǎn):因?yàn)镸NIST使用的是黑底白字的圖片,所以你自己手寫數(shù)字的時(shí)候一定要注意把得到的圖片也改成黑底白字的,否則會(huì)識(shí)別錯(cuò)(至少我得到的結(jié)論是這樣的 ,之前用白底黑字的圖總是識(shí)別出錯(cuò))

源碼一覽:

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 ('識(shí)別為:')

print (predict)

cv2.imshow("Image1", image)

cv2.waitKey(0)

效果圖:

補(bǔ)充知識(shí):keras編寫自定義的層

寫在前面的話

keras已經(jīng)有很多封裝好的庫(kù)供我們調(diào)用,但是有些時(shí)候我們需要的操作keras并沒(méi)有,這時(shí)就需要學(xué)會(huì)自定義keras層了

1.Lambda

這個(gè)東西很方便,但是只能完成簡(jiǎn)單、無(wú)狀態(tài)的自定義操作,而不能建立含有可訓(xùn)練權(quán)重的自定義層。

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第一個(gè)維度為batchsize維度

output=Lambda(lambda x: x[...,1])(input)#取最后一個(gè)維度的數(shù)據(jù),...表示前面所有的維度

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

Model.output

2.keras_custom

學(xué)習(xí)自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層(帶有可訓(xùn)練權(quán)重)

① build:定義權(quán)重,且self.build=True,可以通過(guò)迪奧喲經(jīng)super([layer],self).build()完成

② call:功能邏輯實(shí)現(xiàn)

③ compute_output_shape:計(jì)算輸出張量的shape

import keras.backend as K

from keras.engine.topologyimport Layer#這里的Layer是一個(gè)父類,下面的MyLayer將會(huì)繼承Layer

class MyLayer(Layer):#自定義一個(gè)keras層類

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

self.output_dim=output_dim

super(MyLayer,self).__init__(**kwargs)#必須要的初始化自定義層

def build(self,input_shape):#為Mylayer建立一個(gè)可訓(xùn)練的權(quán)重

#通過(guò)add_weight的形式來(lái)為Mylayer創(chuàng)建權(quán)重矩陣

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

shape=(input_shape[1],self.output_dim),#這里就是建立一個(gè)shape大小的權(quán)重矩陣

initializer='uniform',

trainable=True)

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

#self.build=True

def call(self,x):#call函數(shù)里就是定義了對(duì)x張量的計(jì)算圖,且x只是一個(gè)形式,所以不能被事先定義

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

def compute_output_shape(self,input_shape):

return (input_shape[0],self.output_dim)#這里是自己手動(dòng)計(jì)算出來(lái)的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應(yīng)該長(zhǎng)得像[(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應(yīng)該是一個(gè)類似[(2,2),(3,3)]的list,a=(2,2),b=(3,3)

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

以上這篇使用已經(jīng)得到的keras模型識(shí)別自己手寫的數(shù)字方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

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

總結(jié)

以上是生活随笔為你收集整理的python识别简单训练模型_使用已经得到的keras模型识别自己手写的数字方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。