亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

xi4oh4o / 1445人閱讀

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

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

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

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


直接上代碼:

導(dǎo)入依賴(lài)庫(kù):

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)化為特征矩陣:
每個(gè)文件夾中取前100張圖片的數(shù)據(jù)放到測(cè)試集,剩余的樣本全都作為訓(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)過(guò)歸一化處理,變?yōu)?00p200p的尺寸:*
原圖:

歸一化的圖片:

通過(guò)定義的函數(shù)生成訓(xùn)練數(shù)據(jù)、訓(xùn)練標(biāo)簽、測(cè)試數(shù)據(jù)、測(cè)試標(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é)果:完成對(duì)11個(gè)文件夾的遍歷,并輸出訓(xùn)練標(biāo)簽向量和測(cè)試標(biāo)簽向量:

對(duì)訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的值做線(xiàn)性變化,提高機(jī)器學(xué)習(xí)的速率,并將標(biāo)簽轉(zhuǎn)化為向量,以便用交叉熵計(jì)算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)簽向量、測(cè)試特征矩陣、測(cè)試標(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ù)測(cè)的準(zhǔn)確率用以定義模型的好壞。

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

訓(xùn)一次模型并保存:模型一個(gè)批次處理64個(gè)樣本,迭代1次,用測(cè)試集數(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)十次,這樣寫(xiě)是因?yàn)楸苊怙@存溢出導(dǎo)致之前所有訓(xùn)練結(jié)果丟失。該語(yǔ)句可重復(fù)運(yùn)行。機(jī)器學(xué)習(xí),俗稱(chēng)“煉丹”:

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é)果:該模型在測(cè)試集上最終達(dá)到了99.09%的準(zhǔn)確率。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40775.html

相關(guān)文章

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

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

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

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

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

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

    Awbeci 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<