卷积神经网络
1. 导入需要的库
导入numpy、pandas,tensorflow、sklearn等库,以及导入matplotlib的pyplot模块。从sklearn库的datasets模块中导入load_iris函数,以及从sklearn库的model_selection模块中导入train_test_split函数。从TensorFlow库中导入Keras模块。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
import tensorflow as tf
from tensorflow import keras
2. 加载并显示两张图像
2.1 加载图像
使用了sklearn.datasets.load_sample_image函数来加载两个预先定义的样本图像,并将图像的像素值从0-255的范围缩放到0-1的范围。
china = load_sample_image("china.jpg") / 255
flower = load_sample_image("flower.jpg") / 255
2.2 创建子图
在Matplotlib中创建了两个新的子图,三个数值分别代表行数、列数以及子图的位置。(从左到右,从上到下)。
plt.subplot(1,2,1)
plt.imshow(china)
plt.subplot(1,2,2)
plt.imshow(flower)
运行结果:
2.3 打印图像形状
打印出“china.jpg”图像的形状,即图像的高度、宽度和颜色通道数。
print("china.jpg的维度: ",china.shape)
print("flower.jpg的维度: ",flower.shape)
运行结果:
2.4 打印合并后的图像数组的形状
将两个图像合并为一个NumPy数组,其中第一个元素是“china.jpg”图像,第二个元素是“flower.jpg”图像,计算并存储了合并后的图像数组的形状,并打印出合并后的图像数组的形状,即数据集中图像的数量和每个图像的高度、宽度和颜色通道数。
images = np.array([china,flower])
images_shape = images.shape
print("数据集的维度: ",images_shape)
运行结果:
3. 卷积层
3.1 定义变量
3.1.1 卷积核的大小(u)
u通常表示卷积核(也称为过滤器)的边长。在这里,u被设置为7,意味着卷积核是一个7x7的矩阵。
在图像处理中,卷积核用于检测图像中的特定模式或特征。卷积核的大小(u)决定了它可以检测的特征的大小。
u = 7 # 卷积核边长
3.1.2 滑动步长(s)
s通常表示卷积核的滑动步长(stride)。在这里,s被设置为1,这意味着在每一步,卷积核都会在输入图像上滑动一个像素。
滑动步长(s)决定了卷积核在图像上移动的步长。较小的滑动步长可以提高特征的分辨率,但会增加计算成本。
s = 1 # 滑动步长
3.1.3 输出特征图的数量(p)
p通常表示输出特征图的数量。在这里,p被设置为5,意味着卷积操作将生成5个不同的特征图。
输出特征图的数量(p)决定了卷积操作将生成多少个特征图。每个特征图都捕获了图像的不同方面或特征。
p = 5 # 输出特征图数目
3.2 卷积层形式
input_shape: 输入数据的形状,它是一个元组,代表输入特征图的尺寸加上通道数。
activation: 激活函数,这里使用的是 ReLU(修正线性单元)激活函数。
padding: padding 策略,“SAME” 表示使用边缘填充,使得输出特征图的尺寸与输入相同。
conv = keras.layers.Conv2D(filters = p, kernel_size = u, strides = s, padding="SAME", activation="relu", input_shape=images_shape)
3.3 打印张量
image_after_conv = conv(images)
print("卷积后的张量大小: ", image_after_conv.shape)
运行结果:
4. 池化层
4.1 最大池化层
最大池化(Max Pooling)是一种池化操作,它通过在局部区域中取最大值来减少数据的维度。
pool_max = keras.layers.MaxPool2D(pool_size=2)
image_after_pool_max = pool_max(image_after_conv)
print("最大汇聚后的张量大小: ",image_after_pool_max.shape)
运行结果: