1.3 什么是卷积与池化,卷积神经网络 (TensorFlow )

一.机器学习的卷积与池化

先通过 滤波器来使图片的特征更加明显
在池化,压缩图片信息但不丢失特征,使得计算更加迅速

import numpy as np
import matplotlib.pyplot as plt
from scipy import misc,datasets
# 一张图形
# DeprecationWarning: scipy.misc.ascent has been deprecated in SciPy v1.10.0; and will be completely removed in SciPy v1.12.0. Dataset methods have moved into the scipy.datasets module. Use scipy.datasets.ascent instead.
i = misc.ascent()

# 显示图形
# plt.grid(False)
# plt.gray()
# plt.axis('off')
# plt.imshow(i)
# plt.show()

# 图形转换到数组
i_transformed= np.copy(i)
size_x = i_transformed.shape[0]
size_y = i_transformed.shape[1]

# 定义滤波器
# filter = [[0,1,0],[1,-4,1],[0,1,0]]
# 突出竖线
filter = [[-1,-2,-1],[0,0,0],[1,2,1]]
# 突出横线
# filter = [[-1,0,1],[-2,0,2],[-1,0,1]]
# 权重为1,所有数值相加如果大于1,如果所有数值相加为10,则应该为0.1
# 比如 1,1,1  1,2,1  1,1,1  相加为10
weight = 1

# 图形的像素 以及邻值像素乘以 滤波器对应权重
for x in range(1,size_x-1):
    for y in range(1,size_y-1):
        convolution = 0.0
        convolution = convolution + (i[x-1,y-1] * filter[0][0])
        convolution = convolution + (i[x,y-1] * filter[0][1])
        convolution = convolution + (i[x+1,y-1] * filter[0][2])
        convolution = convolution + (i[x-1,y] * filter[1][0])
        convolution = convolution + (i[x,y] * filter[1][1])
        convolution = convolution + (i[x+1,y] * filter[1][2])
        convolution = convolution + (i[x-1,y+1] * filter[2][0])
        convolution = convolution + (i[x,y+1] * filter[2][1])
        convolution = convolution + (i[x+1,y+1] * filter[2][2])
        convolution = convolution * weight
        if convolution<0:
            convolution = 0
        if convolution>255:
            convolution = 255
        i_transformed[x,y] = convolution

plt.grid(False)
plt.gray()
plt.imshow(i_transformed)
plt.show()


# 池化
# 压缩信息,使得图片像素变一半,2*2中获取最大像素值,4*4变成2*2
new_x = int(size_x/2)
new_y = int(size_y/2)
newImage = np.zeros((new_x,new_y))
for x in range(0,size_x,2):
    for y in range(0,size_y,2):
        pixels = []
        pixels.append(i_transformed[x,y])
        pixels.append(i_transformed[x+1,y])
        pixels.append(i_transformed[x,y+1])
        pixels.append(i_transformed[x+1,y+1])
        pixels.sort(reverse=True)
        newImage[int(x/2),int(y/2)] = pixels[0]

plt.gray()
plt.grid(False)
plt.imshow(newImage)
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_33253054/article/details/130469208