卷積神經網絡(二)

1 卷積運算的兩個問題:

1.1 圖像邊緣信息使用少

? ? ? ? 邊緣的像素點可能只會被用一次或者2次,中間的會用的更多。

1.2 圖像被壓縮

? ? ? ? 5*5的圖像,如果經過3*3的卷積核后,大小變成3*3的。

? ? ? ? N*N的圖像,果經過F*F的卷積核后,大小變成(N-F+1)*(N-F+1)的。

為了解決這個問題,在邊緣會增加像素。像素點增加多少,取決于卷積核的尺寸和滑動的步長。

2 CNN模型:

卷積層,池化層,展開層,全連接層,如何組合成一個有效的模型。這可以參考經典的CNN模型。

一種方法,是參考經典的模型來搭建自己的模型。另外一種方法,可以利用經典模型的部分模塊對圖像進行預處理,然后用處理完的數據搭建自己的模型。

2.1 LeNet-5

輸入圖像:32*32灰度圖,1個通道

訓練參數:約60000個

隨著通道越來越深,圖像尺寸變小,通道增多;卷積和池化成對出現

2.2?AlexNet-5

原始圖像經過96個11*11的filter,步長為4變換成:(227-11)/4+1=55,圖像變化成55*55*96

55x55x96經過3*3步長為2的池化變化成:(55-3)/2+1=27,圖像變化成27*27*96

....

輸入圖像:227*227*3 RGB圖,3個通道
訓練參數:約60 000 000個
特點:

? ? ? 1 適用于識別較為復雜的彩色圖,可識別10000種類別
? ? ? 2 結構比LeNet更為復雜,使用Relu作為激活函數

2.3 VGG16

與AlexNet不同的是,在VGG16種卷積核和池化層的大小都是固定的。

輸入圖像:227*227*3 RGB圖,3個通道
訓練參數:約138 000 000個
特點:1 所有卷積核的寬和高都是3,步長是1.padding都使用same convolution
? ? ? 2 所有池化層的filter寬和高都是2,步長都是2
?? ? ?3 相比于alexnet,有更多的filter用于提取輪廓信息,具有更高的準確性

3 CNN模型的搭建

一種方法,是參考經典的模型來搭建自己的模型。

另外一種方法,可以利用經典模型的部分模塊對圖像進行預處理,然后用處理完的數據搭建自己的模型。

比如在VGG16種,可以去除掉FC層,替換成一個MLP層,然后再加一個FC層來復用原理的模型,然后吧7*7*512作為輸入給到MLP進行訓練。

4 代碼示例

4.1 建立CNN模型進行貓狗識別

1 加載數據

#load the data
from keras.preprocessing.image import ImageDataGenerator
#歸一化
train_datagen = ImageDataGenerator(rescale=1./255)
#從目錄里面導入數據
training_set = train_datagen.flow_from_directory('./cats_and_dogs_filtered/train/', target_size=(50,50), batch_size=32,class_mode='binary')

2 建立模型

#set up the cnn model
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense
model = Sequential()
#卷積層
model.add(Conv2D(32,(3,3), input_shape=(50,50,3), activation = 'relu'))
#池化層
model.add(MaxPool2D(pool_size=(2,2)))
#卷積層
model.add(Conv2D(32,(3,3), activation = 'relu'))
#池化層
model.add(MaxPool2D(pool_size=(2,2)))
#flattening layer
model.add(Flatten())
#FC layer
model.add(Dense(units=128, activation = 'relu'))
model.add(Dense(units=1, activation='sigmoid'))

3 參數配置

#configure the model
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics=['accuracy'])

4 查看模型結構

model.summary()

Model: "sequential_4"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv2d_5 (Conv2D)           (None, 48, 48, 32)        896       max_pooling2d_4 (MaxPooling  (None, 24, 24, 32)       0         2D)                                                             conv2d_6 (Conv2D)           (None, 22, 22, 32)        9248      max_pooling2d_5 (MaxPooling  (None, 11, 11, 32)       0         2D)                                                             flatten_2 (Flatten)         (None, 3872)              0         dense_4 (Dense)             (None, 128)               495744    dense_5 (Dense)             (None, 1)                 129       =================================================================
Total params: 506,017
Trainable params: 506,017
Non-trainable params: 0

5 訓練模型

#train the model
model.fit_generator(training_set, epochs=25)

6 計算訓練集的準確度

#accuracy on the training data
accuracy_train = model.evaluate(training_set)
print(accuracy_train)

7 計算測試集的準確度

#accuracy on the test data
test_set = train_datagen.flow_from_directory('./cats_and_dogs_filtered/validation/', target_size=(50,50), batch_size=32,class_mode='binary')
#accuracy on the training data
accuracy_test = model.evaluate(test_set)
print(accuracy_test)

8 網站下載圖片的測試

#load signal image
from keras.utils import load_img, img_to_array
#pic_dog = './cats_and_dogs_filtered/test_from_internet.jpg'
pic_dog = './cats_and_dogs_filtered/train/dogs/dog.1.jpg'pic_dog = load_img(pic_dog,target_size=(50,50))
pic_dog = img_to_array(pic_dog)
pic_dog = pic_dog/255
pic_dog = pic_dog.reshape(1,50,50,3)
predictions = model.predict(pic_dog)
print(predictions)# 對于二分類問題
if predictions.shape[1] == 1:result = (predictions > 0.5).astype(int)
# 對于多分類問題
else:result = np.argmax(predictions, axis=1)print(result)

4.2 改造VGG16進行識別

1 加載和預處理圖片格式,利用VGG16處理圖片

from keras.utils import load_img, img_to_array
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
import numpy as np
model_vgg = VGG16(weights='imagenet', include_top=False)
def modelProcess(img_path, model):img = load_img(img_path,target_size=(224,224))img = img_to_array(img)x = np.expand_dims(img, axis = 0)x = preprocess_input(x)x_vgg = model_vgg.predict(x)x_vgg = x_vgg.reshape(1,25088)return x_vgg
import os
folder = "./cats_and_dogs_filtered/train/cats"
dirs = os.listdir(folder)#generate path for the images
img_path = []
for i in dirs:if os.path.splitext(i)[1] == ".jpg":img_path.append(i)
img_path = [folder+"//"+i for i in img_path]#preprocess multiple images
features1 = np.zeros([len(img_path), 25088])
for i in range(len(img_path)):feature_i = modelProcess(img_path[i], model_vgg)print('preprocessed: ', img_path[i])features1[i] = feature_ifolder = "./cats_and_dogs_filtered/train/dogs"
dirs = os.listdir(folder)#generate path for the images
img_path = []
for i in dirs:if os.path.splitext(i)[1] == ".jpg":img_path.append(i)
img_path = [folder+"//"+i for i in img_path]#preprocess multiple images
features2 = np.zeros([len(img_path), 25088])
for i in range(len(img_path)):feature_i = modelProcess(img_path[i], model_vgg)print('preprocessed: ', img_path[i])features2[i] = feature_i#label the result
print(features1.shape, features2.shape)
y1 = np.zeros(1000)
y2 = np.ones(1000)X = np.concatenate((features1,features2),axis=0)
y = np.concatenate((y1,y2), axis=0)

2 分離測試和訓練數據

#split the traing and test data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=50)
print(X_train.shape, X_test.shape, X.shape)

3 建立模型

#set up the mlp model
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(units=10, activation='relu',input_dim=25088))
model.add(Dense(units=1, activation='sigmoid'))
model.summary()
 Layer (type)                Output Shape              Param #   
=================================================================dense_12 (Dense)            (None, 10)                250890    dense_13 (Dense)            (None, 1)                 11        =================================================================
Total params: 250,901
Trainable params: 250,901
Non-trainable params: 0

4 配置和訓練模型

#confg the model
model.compile(optimizer='adam', loss = 'binary_crossentropy', metrics=['accuracy'])
#train the model
model.fit(X_train, y_train, epochs=50)

5 訓練集測試

from sklearn.metrics import accuracy_score
y_train_predict_probs= model.predict(X_train)
y_train_predict =  (y_train_predict_probs > 0.5).astype(int)
accuracy_train = accuracy_score(y_train,y_train_predict)
print(accuracy_train)

6?測試集測試

from sklearn.metrics import accuracy_score
y_test_predict_probs= model.predict(X_test)
y_test_predict =  (y_test_predict_probs > 0.5).astype(int)
accuracy_test = accuracy_score(y_test,y_test_predict)
print(accuracy_test)

7 下載圖片測試

#load the data cat
from keras.utils import load_img, img_to_array
pic_path = './cats_and_dogs_filtered/test_from_ie_cat.jpeg'
pic_cat = load_img(pic_path,target_size=(224,224))
img = img_to_array(pic_cat)
x = np.expand_dims(img, axis = 0)
x = preprocess_input(x)
features = model_vgg.predict(x)
features = features.reshape(1,7*7*512)
result_tmp = model.predict(features)
result =  (result_tmp > 0.5).astype(int)
print(result)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78575.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

組網技術-DHCP服務器,RIP協議,OSPF協議

1.DHCP Server提供三種IP地址分配策略: 手工分配地址 自動分配地址 n 動態分配地址 2.DHCP報文類型 DHCP DISCOVER(廣播):用于尋址DHCP Server DHCP OFFER(單播):攜帶分配給客戶端的IP地址 DHCP REQUEST(…

反爬策略應對指南:淘寶 API 商品數據采集的 IP 代理與請求偽裝技術

一、引言? 在電商數據驅動決策的時代,淘寶平臺海量的商品數據極具價值。然而,淘寶為保障平臺安全和用戶體驗,構建了嚴密的反爬體系。當采集淘寶 API 商品數據時,若不采取有效措施,頻繁的請求極易觸發反爬機制&#x…

學習筆記(算法學習+Maven)

單調隊列優化多重背包 #include <bits/stdc.h> using namespace std; const int M 2010; const int N 20010; int q[N]; int hh 0, tt -1; int f[N]; int g[N]; int v[M], w[M], s[M]; int n, m; int main() { cin >> n >> m; for (int i 1; …

WPF之項目創建

文章目錄 引言先決條件創建 WPF 項目步驟理解項目結構XAML 與 C# 代碼隱藏第一個 "Hello, WPF!" 示例構建和運行應用程序總結相關學習資源 引言 Windows Presentation Foundation (WPF) 是 Microsoft 用于構建具有豐富用戶界面的 Windows 桌面應用程序的現代框架。它…

JAVAEE初階01

個人主頁 JavaSE專欄 JAVAEE初階01 操作系統 1.對下&#xff08;硬件&#xff09;管理各種計算機設備 2.對上&#xff08;軟件&#xff09;為各種軟件提供一個穩定的運行環境 線程 運行的程序在操作系統中以進程的形式存在 進程是系統分配資源的最小單位 進程與線程的關…

HTML快速入門-4:HTML <meta> 標簽屬性詳解

<meta> 標簽是 HTML 文檔頭部&#xff08;<head> 部分&#xff09;的重要元素&#xff0c;用于提供關于文檔的元數據&#xff08;metadata&#xff09;。這些數據不會直接顯示在頁面上&#xff0c;但對瀏覽器、搜索引擎和其他服務非常重要。 常用屬性 1. name 和 …

前端基礎之《Vue(12)—插件封裝》

一、插件封裝 1、在Vue生態中&#xff0c;除了Vue本身&#xff0c;其它所有的與Vue相關的第三方包&#xff0c;都是插件 例子&#xff1a; import VueRouter form vue-router Vue.use(VueRouter) // 注冊插件 2、如何封裝Vue插件 &#xff08;1&#xff09;第一種寫法 const…

TCP基礎題:音樂播放列表管理系統

需求描述 服務器端 創建一個 TCP 服務器&#xff0c;監聽本地的 9999 端口&#xff0c;支持多個客戶端連接。維護一個音樂播放列表&#xff0c;每個音樂條目包含歌曲名稱、歌手、時長等信息。能夠處理客戶端的以下請求&#xff1a; 添加音樂到播放列表&#xff1a;接收客戶端發…

Verilog 語法 (二)

在掌握了 Verilog 的基礎語法和常用程序框架之后&#xff0c;本節將帶大家深入學習一些 高級設計知識點。這些內容包括&#xff1a; 阻塞賦值&#xff08;&#xff09;與非阻塞賦值&#xff08;<&#xff09;的區別及使用場景&#xff1b; assign 和 always 語句的差異&am…

OpenCV 圖形API(61)圖像特征檢測------檢測圖像邊緣的函數Canny()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 使用Canny算法在圖像中查找邊緣。 該函數在輸入圖像中查找邊緣&#xff0c;并使用Canny算法在輸出映射&#xff08;edges&#xff09;中標記它們…

ubantu中下載編譯安裝qt5.15.3

操作步驟如下&#xff1a; 克隆 Qt 倉庫&#xff1a; git clone https://code.qt.io/qt/qt5.git cd qt5 切換到 Qt 5.15.3 標簽&#xff1a; git checkout v5.15.3-lts-lgpl 初始化子模塊&#xff1a; perl init-repository 配置和編譯 Qt&#xff1a; ./configure -prefix $H…

畢業論文設計基本內容和要求:

畢業設計基本內容和要求&#xff1a; 研究內容 調查了解LAMP架構和PHP開發&#xff1b; 學習百度旅游調用的其他產品線服務并熟悉請求接口&#xff1b; 學習社區業務層規范&#xff1b; 設計并實現旅游主要模塊&#xff1b; 技術指標 熟悉企業中流程運轉的方式&#xff0c;…

【大語言模型】大語言模型(LLMs)在工業缺陷檢測領域的應用

大語言模型&#xff08;LLMs&#xff09;在工業缺陷檢測領域的應用場景正在快速擴展&#xff0c;結合其多模態理解、文本生成和邏輯推理能力&#xff0c;為傳統檢測方法提供了新的技術路徑。以下是該領域的主要應用場景及相關技術進展&#xff1a; 1. 多模態缺陷檢測與解釋 視…

【AI插件開發】Notepad++ AI插件開發1.0發布和使用說明

一、產品簡介 AiCoder是一款為Notepad設計的輕量級AI輔助插件&#xff0c;提供以下核心功能&#xff1a; 嵌入式提問&#xff1a;對選中的文本內容進行AI分析&#xff0c;通過側邊欄聊天界面與AI交互&#xff0c;實現多輪對話、問題解答或代碼生成。對話式提問&#xff1a;獨…

第2講:R語言中的色彩美學——科研圖表配色指南

目錄 一、背景導引:科研圖表為何需要“配色講究”? 二、色彩基礎認知:別讓“紅綠盲”錯過你的科研成果 三、R語言中的配色庫全景圖 四、案例演示與代碼實戰 ??案例1:ggplot2 + viridis 配色的熱圖 ??案例2:MetBrewer 中的印象派色彩 五、技巧點撥:如何為SCI圖…

基于Django的個性化股票交易管理系統

本項目基于Python3.6、Django2.1、MySql8.0&#xff08;最好不要使用5.6&#xff0c;字符集等方面均不兼容&#xff0c;否則導入數據庫會出錯&#xff09;與股票信息工具包TuShare實現。 創建或激活對應Python開發環境 這里使用了conda來管理環境&#xff0c;強烈推薦&#xf…

超越GPT-4?下一代大模型的技術突破與挑戰

超越GPT-4&#xff1f;下一代大模型的技術突破與挑戰 引言&#xff1a;大模型的演進歷程 人工智能領域近年來最引人注目的發展莫過于大型語言模型(Large Language Models, LLMs)的快速進步。從GPT-3到GPT-4&#xff0c;再到如今各種宣稱"超越GPT-4"的模型不斷涌現&…

Js 之點擊下拉搜索Ajax-Bootstrap-Select

一、效果圖 二、文檔 https://gitcode.com/gh_mirrors/aj/Ajax-Bootstrap-Select/tree/master 三、示例代碼 引入插件js、css <link rel"stylesheet" href"{php echo MODULE_URL}template/lib/bootstrap-select/css/bootstrap-select.min.css"> <…

無線監控系統分類全解析:搭配視頻融合平臺EasyCVR開啟高效監控

隨著技術的發展&#xff0c;無線監控系統在家庭、小型企業、特定行業以及室外惡劣環境中的應用越來越廣泛。本文將介紹幾種常見的無線監控系統&#xff0c;分析其優缺點&#xff0c;并結合EasyCVR視頻融合平臺的功能&#xff0c;探討如何優化無線監控系統的性能和應用。 一、主…

WebRTC服務器Coturn服務器中的通信協議

1、概述 作為WebRTC服務器&#xff0c;coturn通信協議主要是STUN和TURN協議 STUN&TURN協議頭部都是20個字節,用 Message Type來區分不同的協議 |------2------|------2------|------------4------------|------------------------12-------------------------|-----------…