一文教你使用CNN的貓狗分類 ?
使用CNN進(jìn)行貓狗分類
卷積神經(jīng)網(wǎng)絡(luò) (CNN) 是一種算法,將圖像作為輸入,然后為圖像的所有方面分配權(quán)重和偏差,從而區(qū)分彼此。神經(jīng)網(wǎng)絡(luò)可以通過使用成批的圖像進(jìn)行訓(xùn)練,每個圖像都有一個標(biāo)簽來識別圖像的真實性質(zhì)(這里是貓或狗)。一個批次可以包含十分之幾到數(shù)百個圖像。對于每張圖像,將網(wǎng)絡(luò)預(yù)測與相應(yīng)的現(xiàn)有標(biāo)簽進(jìn)行比較,并評估整個批次的網(wǎng)絡(luò)預(yù)測與真實值之間的距離。然后,修改網(wǎng)絡(luò)參數(shù)以最小化距離,從而增加網(wǎng)絡(luò)的預(yù)測能力。類似地,每個批次的訓(xùn)練過程都是類似的。
狗與貓的預(yù)測問題本教程的主要目標(biāo)是開發(fā)一個可以識別貓狗圖像的系統(tǒng)。分析輸入圖像,然后預(yù)測輸出。實現(xiàn)的模型可以根據(jù)需要擴(kuò)展到網(wǎng)站或任何移動設(shè)備。Dogs vs Cats 數(shù)據(jù)集可以從 Kaggle 網(wǎng)站下載。該數(shù)據(jù)集包含一組貓和狗的圖像。我們的主要目標(biāo)是讓模型學(xué)習(xí)貓和狗的各種獨特特征。
一旦模型的訓(xùn)練完成,它將能夠區(qū)分貓和狗的圖像。安裝 Python 3.6 所需的包Numpy -> 1.14.4 [圖像被讀取并存儲在 NumPy 數(shù)組中]TensorFlow -> 1.8.0 [Tensorflow 是 Keras 的后端]Keras -> 2.1.6 [Keras 用于實現(xiàn)CNN]導(dǎo)入庫NumPy- 用于處理數(shù)組、線性代數(shù)。Pandas – 用于讀/寫數(shù)據(jù)Matplotlib – 顯示圖像TensorFlow Keras 模型——需要一個模型來正確預(yù)測TensorFlow Keras 層——每個 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 在稱為過濾器的權(quán)重矩陣的幫助下處理圖像。它們檢測垂直和水平邊緣等低級特征。通過每一層,過濾器識別高級特征。我們首先初始化CNN,#initializing the cnn
classifier=Sequential()
為了編譯 CNN,我們使用了 adam 優(yōu)化器。
自適應(yīng)矩估計 (Adam) 是一種用于計算每個參數(shù)的單獨學(xué)習(xí)率的方法。對于損失函數(shù),我們使用二元交叉熵將類輸出與每個預(yù)測概率進(jìn)行比較。然后它根據(jù)與期望值的總距離計算懲罰分?jǐn)?shù)。
圖像增強(qiáng)是一種將不同類型的變換應(yīng)用于原始圖像的方法,生成同一圖像的多個變換副本。由于移動、旋轉(zhuǎn)、翻轉(zhuǎn)等技術(shù),圖像在某些方面彼此不同。因此,我們使用 Keras ImageDataGenerator 類來增強(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)入這個類并創(chuàng)建一個生成器的實例。我們使用 Keras 通過 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')
卷積卷積是一種線性運算,涉及將權(quán)重與輸入相乘。乘法是在輸入數(shù)據(jù)數(shù)組和稱為過濾器或內(nèi)核的二維權(quán)重數(shù)組之間執(zhí)行的。過濾器總是小于輸入數(shù)據(jù),并且在輸入和過濾器數(shù)組之間執(zhí)行點積。
激活添加激活函數(shù)是為了幫助 ANN 學(xué)習(xí)數(shù)據(jù)中的復(fù)雜模式。激活函數(shù)的主要需要是在神經(jīng)網(wǎng)絡(luò)中加入非線性。
池化池化操作提供空間差異,使系統(tǒng)能夠識別具有不同外觀的對象。它涉及在特征圖的每個通道上添加一個 2D 過濾器,從而總結(jié)過濾器覆蓋的那個區(qū)域中的特征。因此,池化基本上有助于減少網(wǎng)絡(luò)中存在的參數(shù)和計算的數(shù)量。它逐步減小網(wǎng)絡(luò)的空間大小,從而控制過擬合。這一層有兩種操作;平均池化和最大池化。
在這里,我們使用最大池化,根據(jù)其名稱,它只會從池中取出最大值。借助過濾器在輸入中滑動,這是可能的,并且在每個步幅中,最大參數(shù)將被取出,其余參數(shù)將被丟棄。與卷積層不同,池化層不會修改網(wǎng)絡(luò)的深度。
全連接最終池化層的輸出是扁平化的全連接層的輸入。全連接過程的實際工作方式如下:全連接層中的神經(jīng)元檢測某個特征并保留其值,然后將該值傳達(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)練集。這需要一些時間才能完成。classifier.fit_generator(training_set,samples_per_epoch=8000,nb_epoch=25,validation_data=test_set,nb_val_samples=2000)
可以看出,我們在訓(xùn)練集上的準(zhǔn)確度為 0.8115。我們可以通過 predict_image 函數(shù)使用我們的模型預(yù)測新圖像,其中我們必須提供新圖像的路徑作為圖像路徑并使用 predict 方法。如果概率大于 0.5,則圖像將被預(yù)測為狗,否則為貓。#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)
提供的功能我們可以測試我們自己的圖像并驗證模型的準(zhǔn)確性。我們可以將代碼直接集成到我們的其他項目中,并且可以擴(kuò)展到網(wǎng)站或移動應(yīng)用程序設(shè)備中。只需找到合適的數(shù)據(jù)集,更改數(shù)據(jù)集并相應(yīng)地訓(xùn)練模型,我們就可以將項目擴(kuò)展到不同的實體。應(yīng)用我們大致了解了如何執(zhí)行圖像分類。該項目的范圍可以進(jìn)一步擴(kuò)展到具有自動化范圍的不同行業(yè),只需根據(jù)問題的需要來修改數(shù)據(jù)集。
結(jié)論我希望你現(xiàn)在對卷積神經(jīng)網(wǎng)絡(luò)有一個基本的了解,并且可以對貓和狗的圖像進(jìn)行分類。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-9.16點擊進(jìn)入 >> 【限時福利】TE 2025國際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報名>> Works With 開發(fā)者大會深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評選
-
11月27日立即報名>> 【工程師系列】汽車電子技術(shù)在線大會
-
12月18日立即報名>> 【線下會議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
精彩回顧立即查看>> 【限時下載】ADI中國三十周年感恩回饋助力企業(yè)升級!
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場景發(fā)布會暨北京xPN伙伴大會成功舉辦
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 踢館大廠和微軟,剖析WPS靈犀的AI實用主義
- 6 特朗普要求英特爾首位華人 CEO 辭職
- 7 AI版“四萬億刺激”計劃來了
- 8 騰訊 Q2 財報亮眼:AI 已成第二增長曲線
- 9 谷歌吹響AI沖鋒號,AI還有哪些機(jī)會
- 10 騰訊米哈游押寶的中國AI應(yīng)用,正在海外悶聲發(fā)財