国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

xi4oh4o / 1380人閱讀

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

看動畫也不忘機器學習?( ?? ω ?? )y:

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

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


直接上代碼:

導入依賴庫:

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ù)集中導入圖片,歸一化后再轉(zhuǎn)化為特征矩陣:
每個文件夾中取前100張圖片的數(shù)據(jù)放到測試集,剩余的樣本全都作為訓練集。*

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ù)生成訓練數(shù)據(jù)、訓練標簽、測試數(shù)據(jù)、測試標簽:

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個文件夾的遍歷,并輸出訓練標簽向量和測試標簽向量:

對訓練數(shù)據(jù)和測試數(shù)據(jù)的值做線性變化,提高機器學習的速率,并將標簽轉(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) 

輸出訓練訓練特征矩陣、訓練標簽向量、測試特征矩陣、測試標簽向量的維度:

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

運行結(jié)果:

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

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"))

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

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

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

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)進行模型訓練,每一次循環(huán)迭代一次訓練,保存并讀取模型,循環(huán)十次,這樣寫是因為避免顯存溢出導致之前所有訓練結(jié)果丟失。該語句可重復運行。機器學習,俗稱“煉丹”:

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()

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

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

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

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

相關文章

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

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

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

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

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

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

    Awbeci 評論0 收藏0

發(fā)表評論

0條評論

xi4oh4o

|高級講師

TA的文章

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