一文教你使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行圖像分類
介紹卷積神經(jīng)網(wǎng)絡(luò)屬于深度學(xué)習(xí)的子域。深度學(xué)習(xí)中的算法以與人腦相同的方式來(lái)處理信息,但其規(guī)模很小,因?yàn)槲覀兊拇竽X太復(fù)雜了(我們的大腦大約有860億個(gè)神經(jīng)元)。為什么使用CNN進(jìn)行圖像分類?圖像分類通過(guò)從圖像中提取特征,以觀察數(shù)據(jù)集中的某些模式。由于可訓(xùn)練參數(shù)變得非常大,因此使用ANN進(jìn)行圖像分類最終會(huì)在計(jì)算上造成很高的成本。例如,如果我們有一張50 X 50的貓圖像,并且我們想在該圖像上訓(xùn)練傳統(tǒng)的ANN,以將其分類為狗或貓,則可訓(xùn)練參數(shù)變?yōu)楱C(50 * 50)* 100圖像像素乘以隱藏層 + 100 偏差+ 2 * 100 輸出神經(jīng)元+ 2 偏差= 2,50,302我們?cè)谑褂肅NN時(shí)使用了過(guò)濾器,過(guò)濾器根據(jù)其用途而存在許多不同類型。
不同過(guò)濾器及其效果的示例過(guò)濾器通過(guò)在神經(jīng)元之間執(zhí)行局部連接模式來(lái)幫助我們利用特定圖像的空間局部性。卷積操作是指兩個(gè)函數(shù)的逐點(diǎn)乘法以產(chǎn)生第三個(gè)函數(shù),這里一個(gè)函數(shù)是我們的圖像像素矩陣,另一個(gè)是我們的過(guò)濾器。我們?cè)趫D像上滑動(dòng)卷積核,并獲得兩個(gè)矩陣的點(diǎn)積,生成的矩陣稱為“激活圖”或“特征圖”。
在此處使用垂直卷積核對(duì)6X6圖像進(jìn)行卷積有多個(gè)卷積層從圖像中提取特征,最后從輸出層中提取特征。
實(shí)用:分步指南我將使用Google Colab,并且已經(jīng)通過(guò)Google Drive連接了數(shù)據(jù)集,因此,如果使用相同的設(shè)置,則我提供的代碼應(yīng)該是可以使用,切記根據(jù)你的設(shè)置進(jìn)行適當(dāng)?shù)母。步驟1:選擇一個(gè)數(shù)據(jù)集選擇你感興趣的數(shù)據(jù)集,或者你也可以創(chuàng)建自己的圖像數(shù)據(jù)集來(lái)解決自己的圖像分類問(wèn)題。在kaggle上可以獲取到很多數(shù)據(jù)集。我要使用的數(shù)據(jù)集可以在這里找到。
該數(shù)據(jù)集包含12,500個(gè)血細(xì)胞增強(qiáng)圖像(JPEG),并帶有相應(yīng)的細(xì)胞類型標(biāo)簽(CSV)。這4種不同的細(xì)胞類型每種大約有3,000張圖像,這些圖像分為4個(gè)不同的文件夾(根據(jù)細(xì)胞類型)。細(xì)胞類型是嗜酸性粒細(xì)胞,淋巴細(xì)胞,單核細(xì)胞和嗜中性粒細(xì)胞。這是我們需要的所有庫(kù)以及導(dǎo)入它們的代碼。from keras.models import Sequential
import tensorflow as tf
import tensorflow_datasets as tfds
tf.enable_eager_execution()
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.optimizers import SGD, RMSprop, adam
from keras.utils import np_utils
from sklearn.tree import DecisionTreeClassifier # Import Decision Tree Classifier
from sklearn import metricsfrom sklearn.utils import shuffle
from sklearn.model_selection import train_test_splitimport matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
import os
import cv2
import randomfrom numpy import *
from PIL import Image
import theano
步驟2:準(zhǔn)備訓(xùn)練資料集準(zhǔn)備我們的數(shù)據(jù)集進(jìn)行訓(xùn)練,需要設(shè)置路徑和創(chuàng)建類別(標(biāo)簽),并調(diào)整圖像大小。將圖像調(diào)整為200 X 200path_test = "/content/drive/My Drive/semester 5 - ai ml/datasetHomeAssign/TRAIN"
CATEGORIES = ["EOSINOPHIL", "LYMPHOCYTE", "MONOCYTE", "NEUTROPHIL"]
print(img_array.shape)IMG_SIZE =200
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
步驟3:建立訓(xùn)練資料訓(xùn)練的輸入數(shù)據(jù)是一個(gè)數(shù)組,其中包含了圖像像素值和“類別”列表中圖像的索引。training = []def createTrainingData():
for category in CATEGORIES:
path = os.path.join(path_test, category)
class_num = CATEGORIES.index(category)
for img in os.listdir(path):
img_array = cv2.imread(os.path.join(path,img))
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
training.a(chǎn)ppend([new_array, class_num])createTrainingData()
步驟4:隨機(jī)整理資料集random.shuffle(training)
步驟5:分配標(biāo)簽和特征這兩個(gè)列表的這種形狀將在使用NEURAL NETWORKS的分類中使用。X =[]
y =[]for features, label in training:
X.a(chǎn)ppend(features)
y.a(chǎn)ppend(label)
X = np.a(chǎn)rray(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3)
步驟6:標(biāo)準(zhǔn)化X并將標(biāo)簽轉(zhuǎn)換為分類數(shù)據(jù)X = X.a(chǎn)stype('float32')
X /= 255
from keras.utils import np_utils
Y = np_utils.to_categorical(y, 4)
print(Y[100])
print(shape(Y))
步驟7:將X和Y拆分以用于CNNX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 4)
步驟8:定義,編譯和訓(xùn)練CNN模型
batch_size = 16
nb_classes =4
nb_epochs = 5
img_rows, img_columns = 200, 200
img_channel = 3
nb_filters = 32
nb_pool = 2
nb_conv = 3
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu,
input_shape=(200, 200, 3)),
tf.keras.layers.MaxPooling2D((2, 2), strides=2),
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu),
tf.keras.layers.MaxPooling2D((2, 2), strides=2),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(4, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(X_train, y_train, batch_size = batch_size, epochs = nb_epochs, verbose = 1, validation_data = (X_test, y_test))
步驟9:模型的準(zhǔn)確性和得分score = model.evaluate(X_test, y_test, verbose = 0 )
print("Test Score: ", score[0])
print("Test accuracy: ", score[1])
在這9個(gè)簡(jiǎn)單的步驟中,我們準(zhǔn)備了卷積神經(jīng)網(wǎng)絡(luò)模型并使用這些技能來(lái)解決實(shí)際問(wèn)題。你可以在Analytics Vidhya和Kaggle等平臺(tái)上練習(xí)這些技能。你還可以通過(guò)更改不同的參數(shù)并發(fā)現(xiàn)如何獲得最佳的準(zhǔn)確性和得分來(lái)解決問(wèn)題,可以嘗試更改CNN模型中的batch_size,epoch數(shù),甚至添加/刪除圖層。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
11月20日火熱報(bào)名中>> 2024 智能家居出海論壇
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
精彩回顧立即查看>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車
推薦專題
- 1 腦機(jī)接口芯片,華為出了新專利!
- 2 銀行業(yè)AI大模型,從入局到求變
- 3 巨頭搶布局,VC狂撒錢,為了能讓「AI讀心」這些公司卷瘋了
- 4 阿斯麥ASML:“骨折級(jí)”洋相,又成AI第一殺手?
- 5 蘋果市值創(chuàng)新高,iPhone 16能否助力突破4萬(wàn)億美元大關(guān)?
- 6 地平線開啟配售,阿里百度各砸5000萬(wàn)美金,市值最高超500億
- 7 小馬智行沖刺納斯達(dá)克:或成「全球Robotaxi第一股」,兩年半營(yíng)收約12億元
- 8 云從科技:營(yíng)收低迷與虧損加劇,2025年盈利目標(biāo)挑戰(zhàn)重重
- 9 AI奇跡:域名賣爆,無(wú)名小島意外賺2億
- 10 逆境求生,泄密風(fēng)波中的高精地圖
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市