卷积神经网络分类图片过程详解
在这一节中,你将学习如何对 CIFAR-10 中的图片进行分类。
CIFAR-10 数据集由 10 类 60000 张 32×3 2像素的彩色图片组成,每类有 6000 张图片。有 50000 张训练图片和 10000 张测试图片。下面的图片取自https://www.cs.toronto.edu/~kriz/cifar.html:

图 1 CIFAR图像的例子
在这一节,将使用 TFLearn(一个更高层次的框架),它抽象了一些 TensorFlow 的内部细节,能够专注于深度网络的定义。可以在 http://tflearn.org/ 上了解 TFLearn 的信息,这里的代码是标准发布的一部分,网址为https://github.com/tflearn/tflearn/tree/master/examples。
具体操作过程
- 导入几个 utils 和核心层用于实现 ConvNet、dropout、fully_connected 和 max_pool。另外,导入一些对图像处理和图像增强有用的模块。请注意,TFLearn 为 ConvNet 提供了一些已定义的更高级别的层,这能够专注于代码的定义:
- 加载 CIFAR-10 数据,并将其分为 X_train 和 Y_train,X_test 用于测试,Y_test 是测试集的标签。对 X 和 Y 进行混洗可能是有用的,因为这样能避免训练依赖于特定的数据配置。最后一步是对 X 和 Y 进行独热编码:
- 使用 ImagePreprocessing() 对数据集进行零中心化(即对整个数据集计算平均值),同时进行 STD 标准化(即对整个数据集计算标准差)。TFLearn 数据流旨在通过 CPU 先对数据进行预处理,然后在 GPU 上加速模型训练:
- 通过随机左右翻转和随机旋转来增强数据集。这一步是一个简单的技巧,用于增加可用于训练的数据:
- 使用之前定义的图片预处理和图片增强操作创建卷积网络。网络由三个卷积层组成。第一层有 32 个卷积核,尺寸是 3×3,激活函数用 ReLU,这一层后使用 max_pool 层用于缩小尺寸。然后是两个卷积核级联,卷积核的个数是 64,尺寸是 3×3,激活函数是 ReLU。之后依次是 max_pool 层,具有 512 个神经元、激活函数为 ReLU 的全连接的网络,设置 dropout 概率为 50%。最后一层是全连接层,利用 10 个神经元和激活函数 softmax 对 10 个手写数字进行分类。请注意,这种特殊类型的 ConvNet 在 CIFAR-10 中非常有效。其中,使用 Adam 优化器(categorical_crossentropy)学习率是 0.001:
- 实例化 ConvNet 并以 batch_size=96 训练 50 个 epoch:
解读分析
TFLearn 隐藏了许多 TensorFlow 的实现细节,在许多情况下,它可专注于具有更高抽象级别的 ConvNet 的定义。我们的设计在 50 次迭代中达到了 88% 的准确度。以下图片是在 Jupyter notebook 中执行的快照:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构