卷积神经网络
1.导入需要的包
numpy as np
: NumPy是一个用于科学计算的库,它提供了高效的数组处理能力,对于图像处理等任务非常有用。
pandas as pd
: Pandas是一个强大的数据分析和处理库,它提供了数据结构(如DataFrame)和工具,用于数据操作和分析。
matplotlib.pyplot as plt
: Matplotlib是一个绘图库,pyplot是其中的一个模块,它提供了一个类似于MATLAB的绘图框架。
sklearn
: Scikit-Learn是一个用于机器学习的库,它提供了各种分类器、回归器、聚类算法等。
tensorflow as tf
: TensorFlow是一个开源的机器学习库,用于构建和训练各种类型的机器学习模型。
from tensorflow import keras
: Keras是TensorFlow的一个高级API,它允许您轻松地构建和训练复杂的神经网络。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
import tensorflow as tf
from tensorflow import keras
2.数据导入与数据观察
从sklearn中导两张大小为的图像,并组成一个简单数据集image。数据集image的4维张量分别对应着
数据集中的样本数2
图像高度427
图像宽度640
图像通道3
from sklearn.datasets import load_sample_image
china = load_sample_image("china.jpg") / 255
flower = load_sample_image("flower.jpg") / 255
plt.subplot(1,2,1)
plt.imshow(china)
plt.subplot(1,2,2)
plt.imshow(flower)
print("china.jpg的维度:",china.shape)
print("flower.jpg的维度:",flower.shape)
images = np.array([china,flower])
images_shape = images.shape
print("数据集的维度:",images_shape)
3.卷积层
u = 7 #卷积核边长
s = 1 #滑动步长
p = 5 #输出特征图数目
filters
: 整数,指定卷积核的数量,即输出的维度
kernel_size
: 一个整数或元组((height, width)),指定卷积核的尺寸
strides
: 一个整数或元组((stride_height, stride_width)),指定卷积的步长
padding
: 字符串,指定边缘填充方式。有两个选项:
"VALID"
:不进行填充,卷积的边缘部分将被忽略。
"SAME"
:进行填充,使得输出的高度和宽度与输入相同(或根据步长缩小)。填充通常是通过在输入周围添加零来实现。
input_shape
: 一个整数元组,指定输入数据的形状。对于 Conv2D 层,input_shape 应该包含三个整数,分别是输入的高度、宽度和通道数。
conv = keras.layers.Conv2D(filters= p, kernel_size= u, strides= s,padding="SAME", activation="relu", input_shape=images_shape)
卷积后的图像的4维张量分别对应着 - 数据集大小2 - 图像的高427与宽640,正是由于padding==“SAME”,所以图像大小并没有发生变化 - 输出特征图个数5。
image_after_conv = conv(images)
print("卷积后的张量大小:", image_after_conv.shape)
4.汇聚层
最大汇聚
最大汇聚是在下采样区域范围内提取所有元素数值的最大值,参数pool_size决定下采样区域的大小。
由于pool_size = 2,最大汇聚以后图像的特征图大小在高度与宽度上都各自缩小一半。
pool_max = keras.layers.MaxPool2D(pool_size=2)
image_after_pool_max = pool_max(image_after_conv)
print("最大汇聚后的张量大小:"