日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

TensorFlow(8)卷积神经网络实战(2)手写卷积池化

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow(8)卷积神经网络实战(2)手写卷积池化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、獲取并繪制圖像

二、手寫卷積

1、設置卷積核及權重

2、卷積

2-1、卷積實現

2-2、 限值

2-3、圖像賦值

2-4、顯示

?卷積代碼

三、手寫池化

1、創建圖像

2、遍歷池化

3、顯示圖像

池化代碼

總代碼


一、獲取并繪制圖像

import cv2
import numpy as np# 從scipy庫中獲取名為"上升"的圖像。這是一張漂亮的內置圖片,有很多角度和線條
from scipy import misc
image = misc.ascent()        #獲取圖像
width,height = image.shape   #獲取圖像寬高# 繪制圖像(灰度圖)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.gray()
plt.show()

?

二、手寫卷積

1、設置卷積核及權重

如果過濾器中的所有數字加起來不是0或1,那么就應該設置權重,讓過濾器的總和為0或1
例如,如果過濾器是1,1,1,1,2,1,1,1,1。
它們加起來是10,所以可以設置0.1的權重,使它標準化。??

# 設置卷積核及權重
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1

?

2、卷積

# 卷積
# 對圖像每行每列分別卷積(除去最外層)
for x in range(1, width-1):for y in range(1, height-1):

2-1、卷積實現

# 實現卷積# convolution += 圖像列元素*卷積核行元素convolution = 0.0for i in range(3):for j in range(3):convolution += image[x-1+j, y-1+i]*filter[i][j]convolution *= weight

2-2、 限值

# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0

?

2-3、圖像賦值

注:不能直接對原圖賦值:被賦值后,原圖會發生改變,后面還要用原圖做卷積。?

# 圖像賦值copy[x][y] = convolution

如果直接對原圖賦值,得到的就是這種圖像:

?

2-4、顯示

# 顯示灰度圖
plt.imshow(copy)
plt.show()  

?

?卷積代碼

# 手寫實現圖像卷積
# 設置卷積核及權重
copy = image.copy()
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1
# 如果過濾器中的所有數字加起來不是0或1,那么就應該設置權重,讓過濾器的總和為0或1。
# 例如,如果過濾器是1,1,1,1,2,1,1,1,1。
# 它們加起來是10,所以可以設置0.1的權重,使它標準化。# 卷積
for x in range(1, width-1):for y in range(1, height-1):# 實現卷積(圖像對應位置 分別乘 卷積核對應位置)convolution = 0.0for i in range(3):for j in range(3):# 列和行分別對應相乘convolution += image[x-1+j, y-1+i]*filter[i][j]convolution *= weight# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0# 圖像賦值copy[x][y] = convolution# 顯示灰度圖
plt.gray()
plt.grid(False)
plt.imshow(copy)
#plt.axis('off')
plt.show()  

三、手寫池化

在減小圖像數據量的同時,保留圖像的特征。?

1、創建圖像

# 創建圖像(大小為原圖的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))

2、遍歷池化

在:本像素、右像素、下像素、右下像素等四個像素中,選取一個最大值,作為縮小后的新圖像當前位置值。?

# 遍歷池化(步長為2)
for x in range(0, width, 2):for y in range(0, height, 2):# 選取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)

3、顯示圖像

# 顯示圖像
plt.gray()
plt.imshow(new_image2)
plt.show()     

可以發現圖像大小減半的同時,特征也得以保留。?

?

?

池化代碼

# 池化(最大值)
import numpy as np# 創建圖像(大小為原圖的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))# 遍歷池化(步長為2)
for x in range(0, width, 2):for y in range(0, height, 2):# 選取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)# 顯示圖像
plt.gray()
plt.imshow(new_image2)
plt.show()     

總代碼

import cv2
from scipy import misc
image = misc.ascent()import matplotlib.pyplot as plt
plt.grid(False)
plt.gray()
plt.imshow(image)
plt.show()# 圖像尺寸
width, height = image.shape# 手寫實現圖像卷積
# 設置卷積核及權重
new_image = image.copy()
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1
# 如果過濾器中的所有數字加起來不是0或1,那么就應該設置權重,讓過濾器的總和為0或1。
# 例如,如果過濾器是1,1,1,1,2,1,1,1,1。
# 它們加起來是10,所以可以設置0.1的權重,使它標準化。# 卷積
for x in range(1, width-1):for y in range(1, height-1):# 實現卷積(圖像對應位置 分別乘 卷積核對應位置)convolution = 0.0for i in range(3):for j in range(3):# 列和行分別對應相乘convolution += image[x-1+j][y-1+i]*filter[i][j]convolution *= weight# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0# 圖像賦值new_image[x][y] = convolution# 顯示灰度圖
plt.gray()
plt.grid(False)
plt.imshow(new_image)
plt.show()  # 池化(最大值)
import numpy as np# 創建圖像(大小為原圖的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))# 遍歷池化(步長為2)
for x in range(0, width, 2):for y in range(0, height, 2):# 選取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)# 顯示圖像
plt.gray()
plt.imshow(new_image2)
plt.show()     

總結

以上是生活随笔為你收集整理的TensorFlow(8)卷积神经网络实战(2)手写卷积池化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。