深度学习——卷积神经网络

卷积网路的组成

卷积层(提取图像特征)

卷积运算本质上就是在滤波器和输入数据的局部区域间做点积。

css 复制代码
- padding

保持尺寸 :使输出特征图(Feature Map)尺寸与输入一致(如 same 填充)。 保护边缘信息 :防止边缘像素因卷积计算次数少而被忽略。 灵活调整输出大小 :通过填充量控制输出尺寸(如 valid 不填充,输出会缩小)

diff 复制代码
- stride(设置步长)
  • 实际代码实现:

池化层(降维、防止过拟合)

  • 降低了后续网络层的输入维度,缩减模型大小,提高计算速度,并提高了FeatureMap 的鲁棒性,防止过拟合
  • 对卷积层学习到的特征图进行下采样(subsampling)处理,主要由两种:
    • 最大池化:Max Pooling,取窗口内的最大值作为输出
    • 代码实现:
    • 平均池化:Avg Pooling,取窗口内的所有值的均值作为输出
    • 代码实现:

全连接层(输出结果)

将特征图转换成一维向量送入到全连接层中进行分类或回归的操作

卷积神经网络的构建

LeNet-5是一个较简单的卷积神经网络, 输入的二维图像,先经过两次卷积层,池化层,再经过全连接层,最后使用softmax分类作为输出层。

  • 数据加载: 与神经网络的案例一致,首先加载数据集:
scss 复制代码
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
  • 数据处理 卷积神经网络的输入要求是:N H W C ,分别是图片数量,图片高度,图片宽度和图片的通道,因为是灰度图,通道为1
ini 复制代码
# 数据处理:num,h,w,c
# 训练集数据
train_images = tf.reshape(train_images,
(train_images.shape[0],train_images.shape[1],train_images.shape[2], 1))
print(train_images.shape)

# 测试集数据
test_images = tf.reshape(test_images,
(test_images.shape[0],test_images.shape[1],test_images.shape[2], 1))
  • 模型搭建 Lenet-5模型输入的二维图像,先经过两次卷积层,池化层,再经过全连接层,最后使用softmax分类作为输出层,模型构建如下
ini 复制代码
# 模型构建
net = tf.keras.models.Sequential([

# 卷积层:6个5*5的卷积核,激活是sigmoid
tf.keras.layers.Conv2D(filters=6,kernel_size=5,activation='sigmoid',input_shape=(28,28,1)),
    # 最大池化
    tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
    # 卷积层:16个5*5的卷积核,激活是sigmoid
    tf.keras.layers.Conv2D(filters=16,kernel_size=5,activation='sigmoid'),
    # 最大池化
    tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
    # 维度调整为1维数据
    tf.keras.layers.Flatten(),
    # 全卷积层,激活sigmoid
    tf.keras.layers.Dense(120,activation='sigmoid'),
    # 全卷积层,激活sigmoid
    tf.keras.layers.Dense(84,activation='sigmoid'),
    # 全卷积层,激活softmax
    tf.keras.layers.Dense(10,activation='softmax')
])
  • 模型编译 设置优化器和损失函数:
ini 复制代码
# 优化器
optimizer = tf.keras.optimizers.SGD(learning_rate=0.9)
# 模型编译:损失函数,优化器和评价指标
net.compile(optimizer=optimizer,
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])
  • 模型训练
ini 复制代码
# 模型训练
net.fit(train_images, train_labels, epochs=5, validation_split=0.1)
  • 模型评估
ini 复制代码
# 模型评估
score = net.evaluate(test_images, test_labels, verbose=1)
print('Test accuracy:', score[1])
相关推荐
Jerry4 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发5 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星5 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮5 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84075 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>6 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC6 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC7 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师7 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法
兰令水7 小时前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试