成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CNN人臉識別(誤)低配版:辛普森一家

xi4oh4o / 1390人閱讀

摘要:看動畫也不忘機(jī)器學(xué)習(xí)這個項(xiàng)目在后端為上實(shí)現(xiàn)用神經(jīng)網(wǎng)絡(luò)根據(jù)動畫片截圖對辛普森一家的成員進(jìn)行分類,使用的是目前最復(fù)雜和艱深的神經(jīng)網(wǎng)絡(luò)之一卷積神經(jīng)網(wǎng)絡(luò),。數(shù)據(jù)集為個辛普森家族的成員的動畫片截圖,存放在個文件夾中,每個成員有大約張圖片。

看動畫也不忘機(jī)器學(xué)習(xí)?( ?? ω ?? )y:

這個項(xiàng)目在Keras(后端為Tensorflow)上實(shí)現(xiàn)用神經(jīng)網(wǎng)絡(luò)根據(jù)動畫片截圖對辛普森一家的成員進(jìn)行分類,使用的是目前最復(fù)雜和艱深的神經(jīng)網(wǎng)絡(luò)之一:卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)。
數(shù)據(jù)集為11個辛普森家族的成員的動畫片截圖,存放在11個文件夾中,每個成員有大約1000張圖片。
這些圖片有不一樣的尺寸,在進(jìn)過歸一化后和標(biāo)簽一起輸入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練

由于這次圖像識別訓(xùn)練直接用的圖片,因此該程序?qū)嶋H上可以用來做很多事情(驗(yàn)證碼識別,智能交通領(lǐng)域的機(jī)器視覺,行人和車輛識別),只需更換文件夾路徑,指向新的數(shù)據(jù)集即可。


直接上代碼:

導(dǎo)入依賴庫:

from PIL import Image
import numpy as np
import os
import glob
import re
import keras
from keras.optimizers import SGD, Adam
from keras.models import Sequential
from keras.models import load_model
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K

*定義函數(shù):從數(shù)據(jù)集中導(dǎo)入圖片,歸一化后再轉(zhuǎn)化為特征矩陣:
每個文件夾中取前100張圖片的數(shù)據(jù)放到測試集,剩余的樣本全都作為訓(xùn)練集。*

def read_img(location):
    x_train = [] 
    y_train = [] 
    x_test = [] 
    y_test = [] 
    label_name = [] 
    dirs = os.listdir(location) 
    label = 0 
    count = 0
    for i in dirs: #loop all directory
        print(i)
        n = 0 
        label_name.append(i) #save folder name in var label_name
        x_s = 200
        y_s = 200
        for pic in glob.glob(location+""+i+"*.jpg"): 
            im = Image.open(pic) #open data
            im = im.resize((x_s, y_s), Image.ANTIALIAS)
            im = np.array(im) #store im as numpy array
            if(im.shape[0]==200 and im.shape[1]==200): 
                r = im[:,:,0]
                g = im[:,:,1]
                b = im[:,:,2]
                if(n<100): 
                    x_test.append([r,g,b]) #save in x_test
                    y_test.append([label]) #save in y_test
                else: #remaining data set as training data
                    x_train.append([r,g,b]) #save in x_train
                    y_train.append([label]) #save in y_train
                n = n + 1 
                count = count + 1 
        label = label + 1 #increment label
    print(label_name)
    print(dirs)
    return np.array(x_train),np.array(y_train),np.array(x_test),np.array(y_test)

將圖片經(jīng)過歸一化處理,變?yōu)?00p200p的尺寸:*
原圖:

歸一化的圖片:

通過定義的函數(shù)生成訓(xùn)練數(shù)據(jù)、訓(xùn)練標(biāo)簽、測試數(shù)據(jù)、測試標(biāo)簽:

path="E:JLDdesktop	he-simpsons-characters-datasetsimpsons_dataset"
img_rows = 200 #num of image height
img_cols = 200 #num of image width
num_class = 11 #num of classes/labels
x_train,y_train,x_test,y_test = read_img(path) 

輸出的結(jié)果:完成對11個文件夾的遍歷,并輸出訓(xùn)練標(biāo)簽向量和測試標(biāo)簽向量:

對訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的值做線性變化,提高機(jī)器學(xué)習(xí)的速率,并將標(biāo)簽轉(zhuǎn)化為向量,以便用交叉熵計算loss值:

x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 3) 
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 3) 
input_shape = (img_rows, img_cols, 3)
x_train = x_train.astype("float32") 
x_test = x_test.astype("float32") 
x_train /= 255 
x_test /= 255 
y_train = keras.utils.to_categorical(y_train, num_class) 
y_test = keras.utils.to_categorical(y_test, num_class) 

輸出訓(xùn)練訓(xùn)練特征矩陣、訓(xùn)練標(biāo)簽向量、測試特征矩陣、測試標(biāo)簽向量的維度:

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

運(yùn)行結(jié)果:

定義CNN神經(jīng)網(wǎng)絡(luò)模型:

model = Sequential()
model.add(Conv2D(64, kernel_size=(3, 3),activation="relu",input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(32, (3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Conv2D(32, (3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(128, activation="relu"))
model.add(Dropout(0.5))

model.add(Dense(num_class, activation="softmax"))

編譯模型:用交叉熵作為損失值,隨機(jī)梯度下降作為優(yōu)化器,預(yù)測的準(zhǔn)確率用以定義模型的好壞。

model.compile(loss="categorical_crossentropy",
              optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True),
              metrics=["accuracy"])

訓(xùn)一次模型并保存:模型一個批次處理64個樣本,迭代1次,用測試集數(shù)據(jù)做驗(yàn)證。

model.fit(x_train, y_train, batch_size=64, epochs=1, verbose=1, validation_data=(x_test, y_test))
model.save("Simpson.h5")

循環(huán)進(jìn)行模型訓(xùn)練,每一次循環(huán)迭代一次訓(xùn)練,保存并讀取模型,循環(huán)十次,這樣寫是因?yàn)楸苊怙@存溢出導(dǎo)致之前所有訓(xùn)練結(jié)果丟失。該語句可重復(fù)運(yùn)行。機(jī)器學(xué)習(xí),俗稱“煉丹”:

for i in range(0,10):
    print("The "+str(i)+" th Iteration")
    model=load_model("Simpson.h5")
    model.fit(x_train, y_train, batch_size=64, epochs=1, verbose=1, validation_data=(x_test, y_test))
    model.save("Simpson.h5")
    K.clear_session()

運(yùn)行結(jié)果:該模型在測試集上最終達(dá)到了99.09%的準(zhǔn)確率。

若要用該模型進(jìn)行識別應(yīng)用,只需調(diào)用model.predict()函數(shù)就行。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40775.html

相關(guān)文章

  • 【教學(xué)向】再加150行代碼教你實(shí)現(xiàn)一個配版的web component庫(1) —設(shè)計篇

    摘要:為的內(nèi)置一個方法,用法和原生的事件機(jī)制一毛一樣。 前言 上兩篇Mvvm教程的熱度超出我的預(yù)期,很多碼友留言表揚(yáng)同時希望我繼續(xù)出下一篇教程,當(dāng)時我也半開玩笑說只要點(diǎn)贊超10就兌現(xiàn)承諾,沒想到還真破了10,所以就有了今天的文章。 準(zhǔn)備工作 熟讀 【教學(xué)向】150行代碼教你實(shí)現(xiàn)一個低配版的MVVM庫(1)- 原理篇【教學(xué)向】150行代碼教你實(shí)現(xiàn)一個低配版的MVVM庫(2)- 代碼篇 本篇是在...

    Clect 評論0 收藏0
  • 【教學(xué)向】150行代碼教你實(shí)現(xiàn)一個配版的MVVM庫(1)- 原理篇

    摘要:模塊則負(fù)責(zé)維護(hù),以及各個模塊間的調(diào)度思考題了解了的實(shí)現(xiàn)機(jī)制,你能否自己動手也試著用百來行代碼實(shí)現(xiàn)一個庫呢好了本教程第一部分設(shè)計篇就寫到這里,具體請移步下一篇教學(xué)向行代碼教你實(shí)現(xiàn)一個低配版的庫代碼篇我會用給出一版實(shí)現(xiàn)。 適讀人群 本文適合對MVVM有一定了解(如有主流框架ng,vue等使用經(jīng)驗(yàn)配合本文服用則效果更佳),雖然會用這類框架,但是對框架底層核心實(shí)現(xiàn)又不太清楚,或者能說出個所以然...

    selfimpr 評論0 收藏0
  • 基于canvas和web audio實(shí)現(xiàn)配版MikuTap

    摘要:導(dǎo)言最近發(fā)掘了一個特別的網(wǎng)頁小游戲。于是第二天我就繼續(xù)沉迷,隨著一陣抽搐,這個游戲索然無味之后,冷靜的我決定用和開發(fā)出一個低配版。我的低配版在交互操作比較高的情況下,還是比較卡的,沒有原網(wǎng)頁的流暢性,可能后續(xù)考慮版本實(shí)現(xiàn)。 導(dǎo)言 最近發(fā)掘了一個特別happy的網(wǎng)頁小游戲--MikuTap。打開之后沉迷了一下午,導(dǎo)致開發(fā)工作沒做完差點(diǎn)就要刪庫跑路了,還好boss瞥了我一眼就沒下文了。于是...

    Awbeci 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<