一文教你使用CNN的貓狗分類 ?
使用CNN進(jìn)行貓狗分類
卷積神經(jīng)網(wǎng)絡(luò) (CNN) 是一種算法,將圖像作為輸入,然后為圖像的所有方面分配權(quán)重和偏差,從而區(qū)分彼此。神經(jīng)網(wǎng)絡(luò)可以通過(guò)使用成批的圖像進(jìn)行訓(xùn)練,每個(gè)圖像都有一個(gè)標(biāo)簽來(lái)識(shí)別圖像的真實(shí)性質(zhì)(這里是貓或狗)。一個(gè)批次可以包含十分之幾到數(shù)百個(gè)圖像。對(duì)于每張圖像,將網(wǎng)絡(luò)預(yù)測(cè)與相應(yīng)的現(xiàn)有標(biāo)簽進(jìn)行比較,并評(píng)估整個(gè)批次的網(wǎng)絡(luò)預(yù)測(cè)與真實(shí)值之間的距離。然后,修改網(wǎng)絡(luò)參數(shù)以最小化距離,從而增加網(wǎng)絡(luò)的預(yù)測(cè)能力。類似地,每個(gè)批次的訓(xùn)練過(guò)程都是類似的。
狗與貓的預(yù)測(cè)問(wèn)題本教程的主要目標(biāo)是開發(fā)一個(gè)可以識(shí)別貓狗圖像的系統(tǒng)。分析輸入圖像,然后預(yù)測(cè)輸出。實(shí)現(xiàn)的模型可以根據(jù)需要擴(kuò)展到網(wǎng)站或任何移動(dòng)設(shè)備。Dogs vs Cats 數(shù)據(jù)集可以從 Kaggle 網(wǎng)站下載。該數(shù)據(jù)集包含一組貓和狗的圖像。我們的主要目標(biāo)是讓模型學(xué)習(xí)貓和狗的各種獨(dú)特特征。
一旦模型的訓(xùn)練完成,它將能夠區(qū)分貓和狗的圖像。安裝 Python 3.6 所需的包Numpy -> 1.14.4 [圖像被讀取并存儲(chǔ)在 NumPy 數(shù)組中]TensorFlow -> 1.8.0 [Tensorflow 是 Keras 的后端]Keras -> 2.1.6 [Keras 用于實(shí)現(xiàn)CNN]導(dǎo)入庫(kù)NumPy- 用于處理數(shù)組、線性代數(shù)。Pandas – 用于讀/寫數(shù)據(jù)Matplotlib – 顯示圖像TensorFlow Keras 模型——需要一個(gè)模型來(lái)正確預(yù)測(cè)TensorFlow Keras 層——每個(gè) NN 都需要層,而 CNN 需要幾層。import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
CNN 在稱為過(guò)濾器的權(quán)重矩陣的幫助下處理圖像。它們檢測(cè)垂直和水平邊緣等低級(jí)特征。通過(guò)每一層,過(guò)濾器識(shí)別高級(jí)特征。我們首先初始化CNN,#initializing the cnn
classifier=Sequential()
為了編譯 CNN,我們使用了 adam 優(yōu)化器。
自適應(yīng)矩估計(jì) (Adam) 是一種用于計(jì)算每個(gè)參數(shù)的單獨(dú)學(xué)習(xí)率的方法。對(duì)于損失函數(shù),我們使用二元交叉熵將類輸出與每個(gè)預(yù)測(cè)概率進(jìn)行比較。然后它根據(jù)與期望值的總距離計(jì)算懲罰分?jǐn)?shù)。
圖像增強(qiáng)是一種將不同類型的變換應(yīng)用于原始圖像的方法,生成同一圖像的多個(gè)變換副本。由于移動(dòng)、旋轉(zhuǎn)、翻轉(zhuǎn)等技術(shù),圖像在某些方面彼此不同。因此,我們使用 Keras ImageDataGenerator 類來(lái)增強(qiáng)我們的圖像。
#part2-fitting the cnn to the images
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
我們需要一種方法將我們的圖像轉(zhuǎn)換為內(nèi)存中的成批數(shù)據(jù)數(shù)組,以便在訓(xùn)練期間將它們饋送到網(wǎng)絡(luò)。ImageDataGenerator 可以很容易地用于此目的。所以,我們導(dǎo)入這個(gè)類并創(chuàng)建一個(gè)生成器的實(shí)例。我們使用 Keras 通過(guò) ImageDataGenerator 類的 flow_from_directory 方法從磁盤檢索圖像。# Generating images for the Test set
test_datagen = ImageDataGenerator(rescale = 1./255)
# Creating training set
training_set = train_datagen.flow_from_directory('C:/Users/khushi shah/AndroidStudioProjects/catanddog/dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
# Creating the Test set
test_set = test_datagen.flow_from_directory('C:/Users/khushi shah/AndroidStudioProjects/catanddog/dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
卷積卷積是一種線性運(yùn)算,涉及將權(quán)重與輸入相乘。乘法是在輸入數(shù)據(jù)數(shù)組和稱為過(guò)濾器或內(nèi)核的二維權(quán)重?cái)?shù)組之間執(zhí)行的。過(guò)濾器總是小于輸入數(shù)據(jù),并且在輸入和過(guò)濾器數(shù)組之間執(zhí)行點(diǎn)積。
激活添加激活函數(shù)是為了幫助 ANN 學(xué)習(xí)數(shù)據(jù)中的復(fù)雜模式。激活函數(shù)的主要需要是在神經(jīng)網(wǎng)絡(luò)中加入非線性。
池化池化操作提供空間差異,使系統(tǒng)能夠識(shí)別具有不同外觀的對(duì)象。它涉及在特征圖的每個(gè)通道上添加一個(gè) 2D 過(guò)濾器,從而總結(jié)過(guò)濾器覆蓋的那個(gè)區(qū)域中的特征。因此,池化基本上有助于減少網(wǎng)絡(luò)中存在的參數(shù)和計(jì)算的數(shù)量。它逐步減小網(wǎng)絡(luò)的空間大小,從而控制過(guò)擬合。這一層有兩種操作;平均池化和最大池化。
在這里,我們使用最大池化,根據(jù)其名稱,它只會(huì)從池中取出最大值。借助過(guò)濾器在輸入中滑動(dòng),這是可能的,并且在每個(gè)步幅中,最大參數(shù)將被取出,其余參數(shù)將被丟棄。與卷積層不同,池化層不會(huì)修改網(wǎng)絡(luò)的深度。
全連接最終池化層的輸出是扁平化的全連接層的輸入。全連接過(guò)程的實(shí)際工作方式如下:全連接層中的神經(jīng)元檢測(cè)某個(gè)特征并保留其值,然后將該值傳達(dá)給狗和貓類,然后他們檢查該特征并確定該特征是否與它們相關(guān)。
#step1-convolution
classifier.a(chǎn)dd(Convolution2D(32,3,3,input_shape=(64,64,3),activation='relu'))
#step2-maxpooling
classifier.a(chǎn)dd(MaxPooling2D(pool_size=(2,2)))
#step3-flattening
classifier.a(chǎn)dd(Flatten())
#step4-fullconnection
classifier.a(chǎn)dd(Dense(output_dim=128,activation='relu'))
classifier.a(chǎn)dd(Dense(output_dim=1,activation='sigmoid'))
我們正在將我們的模型擬合到訓(xùn)練集。這需要一些時(shí)間才能完成。classifier.fit_generator(training_set,samples_per_epoch=8000,nb_epoch=25,validation_data=test_set,nb_val_samples=2000)
可以看出,我們?cè)谟?xùn)練集上的準(zhǔn)確度為 0.8115。我們可以通過(guò) predict_image 函數(shù)使用我們的模型預(yù)測(cè)新圖像,其中我們必須提供新圖像的路徑作為圖像路徑并使用 predict 方法。如果概率大于 0.5,則圖像將被預(yù)測(cè)為狗,否則為貓。#to predict new images
def predict_image(imagepath, classifier):
predict = image.load_img(imagepath, target_size = (64, 64))
predict_modified = image.img_to_array(predict)
predict_modified = predict_modified / 255
predict_modified = np.expand_dims(predict_modified, axis = 0)
result = classifier.predict(predict_modified)
if result[0][0] >= 0.5:
prediction = 'dog'
probability = result[0][0]
print ("probability = " + str(probability))
else:
prediction = 'cat'
probability = 1 - result[0][0]
print ("probability = " + str(probability))
print("Prediction = " + prediction)
提供的功能我們可以測(cè)試我們自己的圖像并驗(yàn)證模型的準(zhǔn)確性。我們可以將代碼直接集成到我們的其他項(xiàng)目中,并且可以擴(kuò)展到網(wǎng)站或移動(dòng)應(yīng)用程序設(shè)備中。只需找到合適的數(shù)據(jù)集,更改數(shù)據(jù)集并相應(yīng)地訓(xùn)練模型,我們就可以將項(xiàng)目擴(kuò)展到不同的實(shí)體。應(yīng)用我們大致了解了如何執(zhí)行圖像分類。該項(xiàng)目的范圍可以進(jìn)一步擴(kuò)展到具有自動(dòng)化范圍的不同行業(yè),只需根據(jù)問(wèn)題的需要來(lái)修改數(shù)據(jù)集。
結(jié)論我希望你現(xiàn)在對(duì)卷積神經(jīng)網(wǎng)絡(luò)有一個(gè)基本的了解,并且可以對(duì)貓和狗的圖像進(jìn)行分類。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長(zhǎng)空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?