深度学习图像识别实战

本文涉及的产品
图像搜索,任选一个服务类型 1个月
简介: 深度学习图像识别实战

1 卷积运算

这节课我们来看如何把卷积运算融入到神经网络中,我们还是以上节的“5”为例:

这是一张 8 * 8 的灰度图,用一个 3 * 3 的卷积核对它进行卷积,输出一个 6 * 6 的结果,我们把这个做卷积运算的一层称为卷积层。卷完以后我们把结果拆成一个数组,送入到后面的全连接层神经网络中。


那么问题来了,卷积核中的各个值是多少呢?实际上,我们不必管它,随机初始化这些值就好,卷积核的值也是通过训练学习而来的。那么如何反向传播调整参数呢?

我们知道,卷积的过程就是:卷积核依次和这些小图(局部数据)对应元素相乘再相加得到一个值。

这个 3 * 3 的小区域的每个元素值是输入数据卷积核上的值可以看作是对应输入数据的权值参数W。对应元素相乘并相加得到了一个线性函数:

当然偏置项b、激活函数也不能少:

不过还需要注意几个细节:

  • 首先这四个神经元的输出是根据卷积的过程排列而成的二维的结构,所以我们在送入全连接层时需要手动进行平铺
  • 然后这四个神经元的输入并不相同,实际上是同一个图片的不同区域
  • 最后这四个神经元的权值参数并不是独立的,它们都来自同一个卷积核,所以实际上它们的权值参数(包括偏置项b)是一样的,我们只是把一个东西强行拆开平铺成4个。也就是说这四个神经元复用了同一套权重参数,这就是所谓的参数共享

相比之下我们使用全连接层,需要特别多的参数:

而对于卷积层,由于使用参数共享,只需要使用10个参数:

实际上你想要提取多少特征就搞多少个卷积核就可以

我们都知道灰度图片是一个通道的,而彩色图片有三个通道的:

此时我们的卷积运算也需要在三维上运算:

2 LeNet-5网络

在卷积网络发展的早期,深度学习领域巨头人物LeCun1988年提出了一种经典的卷积神经网络结构:LeNet-5

可以看出,LeNet-5就卷了两次之后再送入全连接层。

这两层立方块就是所谓的“池化层”,我们从这个数据的左上角开始,框出 2 * 2 区域,相加取平均值,这就是所谓“平均池化” (当然也可以取最大值,称为“最大池化”

我们简单的复现一下LeNet-5网络LeNet-5.py.py

简单的补充说明一下:

X_train数据说明:

卷积前后图像大小的计算:

卷积-Same模式:

卷积-Valid模式:

# 导入数据集
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
# One-Hot编码转化
from keras.utils import to_categorical
# 2D卷积层
from keras.layers import Conv2D
# 二维平均池化层
from keras.layers import AveragePooling2D
# 数组平铺
from keras.layers import Flatten
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
# 减少差距,加快梯度下降,归一化操作
X_train = X_train.reshape(60000, 28, 28, 1) / 255.0
X_test = X_test.reshape(10000, 28, 28, 1) / 255.0
Y_train = to_categorical(Y_train, 10)
Y_test = to_categorical(Y_test, 10)
model = Sequential()
# 卷积层部分
model.add(
    Conv2D(
        filters=6,  # 卷积核/过滤器数量
        kernel_size=(5, 5),  # 卷积核尺寸
        strides=(1, 1),  # 步长
        input_shape=(28, 28, 1),  # 输入形状
        padding='valid',  # 填充模式(越卷越小)
        activation='relu'  # 激活函数
    )
)
# 池化窗口大小为 2*2
model.add(AveragePooling2D(pool_size=(2, 2)))
model.add(
    Conv2D(
        filters=16,  # 卷积核/过滤器数量
        kernel_size=(5, 5),  # 卷积核尺寸
        strides=(1, 1),  # 步长
        padding='valid',  # 填充模式(越卷越小)
        activation='relu'  # 激活函数
    )
)
model.add(AveragePooling2D(pool_size=(2, 2)))
model.add(Flatten())
# 全连接层部分
model.add(Dense(units=120, activation='relu'))
model.add(Dense(units=84, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
# 送入训练
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.05), metrics=['accuracy'])
model.fit(X_train, Y_train, epochs=100, batch_size=256)
# 评估测试集
loss, accuracy = model.evaluate(X_test, Y_test)
print("loss" + str(loss))
print("accuracy" + str(accuracy))

目录
相关文章
|
9天前
|
机器学习/深度学习 人工智能 文字识别
中药材图像识别数据集(100类,9200张)|适用于YOLO系列深度学习分类检测任务
本数据集包含9200张中药材图像,覆盖100种常见品类,已标注并划分为训练集与验证集,支持YOLO等深度学习模型。适用于中药分类、目标检测、AI辅助识别及教学应用,助力中医药智能化发展。
|
28天前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
7月前
|
机器学习/深度学习 自然语言处理 算法
PyTorch PINN实战:用深度学习求解微分方程
物理信息神经网络(PINN)是一种将深度学习与物理定律结合的创新方法,特别适用于微分方程求解。传统神经网络依赖大规模标记数据,而PINN通过将微分方程约束嵌入损失函数,显著提高数据效率。它能在流体动力学、量子力学等领域实现高效建模,弥补了传统数值方法在高维复杂问题上的不足。尽管计算成本较高且对超参数敏感,PINN仍展现出强大的泛化能力和鲁棒性,为科学计算提供了新路径。文章详细介绍了PINN的工作原理、技术优势及局限性,并通过Python代码演示了其在微分方程求解中的应用,验证了其与解析解的高度一致性。
1437 5
PyTorch PINN实战:用深度学习求解微分方程
|
7月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
425 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
8月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
753 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
10月前
|
机器学习/深度学习 网络架构 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过研究卷积神经网络(CNN)的结构和原理,本文展示了深度学习如何提高图像识别的准确性和效率。同时,本文也讨论了数据不平衡、过拟合、计算资源限制等问题,并提出了相应的解决策略。
299 19
|
10月前
|
机器学习/深度学习 人工智能 算法
深度学习在图像识别中的革命性应用####
本文不采用传统摘要形式,直接以一段引人入胜的事实开头:想象一下,一台机器能够比人类更快速、更准确地识别出图片中的对象,这不再是科幻电影的情节,而是深度学习技术在图像识别领域带来的现实变革。通过构建复杂的神经网络模型,特别是卷积神经网络(CNN),计算机能够从海量数据中学习到丰富的视觉特征,从而实现对图像内容的高效理解和分类。本文将深入探讨深度学习如何改变图像识别的游戏规则,以及这一技术背后的原理、关键挑战与未来趋势。 ####
221 1
|
10月前
|
机器学习/深度学习 传感器 边缘计算
基于深度学习的图像识别技术在自动驾驶中的应用####
随着人工智能技术的飞速发展,深度学习已成为推动自动驾驶技术突破的关键力量之一。本文深入探讨了深度学习算法,特别是卷积神经网络(CNN)在图像识别领域的创新应用,以及这些技术如何被集成到自动驾驶汽车的视觉系统中,实现对复杂道路环境的实时感知与理解,从而提升驾驶的安全性和效率。通过分析当前技术的最前沿进展、面临的挑战及未来趋势,本文旨在为读者提供一个全面而深入的视角,理解深度学习如何塑造自动驾驶的未来。 ####
430 1
|
10月前
|
机器学习/深度学习
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,并分析了其面临的主要挑战。通过综述深度学习模型的基本原理、图像识别任务的特点以及当前的研究进展,本文旨在为读者提供一个关于深度学习在图像识别中应用的全面视角。
141 0