简 介: 在上面测试过程中总是时不常碰到版本不兼容的问题。这还是都是在AI STudio环境测试的结果。不知为什么,现在手头的版本还是没有能够反映出最终的软件的版本的情况下。

关键词AIMNIST

















































































































横纵教学法









目 录
Contents









手写数字识别任务









MNIST数据集合









构建CNN









极简方案









建立MNIST工程









测试条件









显示图片









飞浆API









总 结







§01 横纵教学法


  这是 零基础实践深度学习 中【2.2】MNIST实验内容。

  核心的内容来自于: 百度架构师手把手带你零基础入门深度学习

▲ 图1.2 深度学习零基础实践

一、手写数字识别任务

  数字识别是计算机从纸质文档、照片或其他来源接收、理解并识别可读的数字的能力,目前比较受关注的是手写数字识别。手写数字识别是一个典型的图像分类问题,已经被广泛应用于汇款单号识别、手写邮政编码识别,大大缩短了业务处理时间,提升了工作效率和质量。

  在处理如 图1 所示的手写邮政编码的简单图像分类任务时,可以使用基于MNIST数据集的手写数字识别模型。MNIST是深度学习领域标准、易用的成熟数据集,包含60000条训练样本和10000条测试样本。

▲ 图1.1.1 手写数字识别任务

  手写数字识别是深度学习中相对简单的模型,非常适用初学者。正如学习编程时,我们输入的第一个程序是打印“Hello World!”一样。 在飞桨的入门教程中,我们选取了手写数字识别模型作为启蒙教材,以便更好的帮助读者快速掌握飞桨平台的使用。

二、MNIST数据集合

  MNIST数据集是从NIST的Special Database 3(SD-3)和Special Database 1(SD-1)构建而来。Yann LeCun等人从SD-1和SD-3中各取一半作为MNIST训练集和测试集,其中训练集来自250位不同的标注员,且训练集和测试集的标注员完全不同。

▲ 图1.2.1 MNIST数据集合

  在MNIST 数据集中有两类图像:一类是训练图像(对应文件train-images-idx3-ubyte.gz 和train - labels-idx1-ubyte.gz ), 另一类是测试图像(对应文件t10k-images-idx3-ubyte.gz 和t10k-labels-idx1-ubyte.gz ) 。训练图像一共有60000 张,供研究人员训练出合适的模型。测试图像一共有10000 张,供研究人员测试训练的模型的性能。在TensorFlow 中, 可以使用下面的Python 代码下载MNIST 数据(在随书附赠的代码中,该代码对应的文件是donwload.py )。

三、构建CNN

1、构建NN过程

(1) 构建具体流程

▲ 图1.3.1 利用PaddlePaddle构建NN过程

(2) 构建NN特点

  • 从代码结构上看,模型均为数据处理、定义网络结构和训练过程三个部分。

  • 从代码细节来看,两个模型也很相似。

  这就是使用飞桨框架搭建深度学习模型的优势,只要完成一个模型的案例学习,其它任务即可触类旁通。在工业实践中,程序员用飞桨框架搭建模型,无需每次都另起炉灶,多数情况是先在飞桨模型库中寻找与目标任务类似的模型,再在该模型的基础上修改少量代码即可完成新的任务。

▲ 图1.3.2 利用PaddlePaddle构建NN的代码示例

2、横纵教学方法

▲ 图1.1 “横纵式”教学方法-纵向极简实现方案

  在“横纵式”教学法中,纵向概要介绍模型的基本代码结构和极简实现方案。横向深入探讨构建模型的每个环节中,更优但相对复杂的实现方案。例如在模型设计环节,除了在极简版本使用的单层神经网络(与房价预测模型一样)外,还可以尝试更复杂的网络结构,如多层神经网络、加入非线性的激活函数,甚至专门针对视觉任务优化的卷积神经网络。

  这种“横纵式”教学法的设计思路尤其适用于深度学习的初学者,具有如下两点优势:

  • 帮助读者轻松掌握深度学习内容:采用这种方式设计教学案例,读者在学习过程中接收到的信息是线性增长的,在难度上不会有阶跃式的提高。
  • 模拟真实建模的实战体验:先使用熟悉的模型构建一个可用但不够出色的基础版本(Baseline),再逐渐分析每个建模环节可优化的点,一点点的提升优化效果,让读者获得到真实建模的实战体验。

  相信在本章结束时,大家会对深入实践深度学习建模有一个更全面的认识,接下来我们将逐步学习建模的方法。

§02 极简方案


一、建立MNIST工程

  在AI Studio下简历MNIST Notebook工程。在建立过程中增加MNIST数据集合。

1、添加MNIST数据集合

▲ 图2.1.1 MNIST手写体工程

2、处理数据集合

  进入数据库看到对应的数据文件。它们都是压缩文件。

▲ 图2.1.2 进入工程之后看到的数据文件

▲ 图2.1.3 进入工程之后看到的数据文件

(1) 加压缩数据文件

▲ 图2.1.4 通过鼠标右键加压缩数据文件

二、测试条件

  根据 百度架构师手把手带你零基础入门深度学习 中测试,测试paddlepaddle环境中软件包是否符合要求。

1、测试数据包

import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph.nn import FC
import numpy as np
import os
from PIL import Image
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/setuptools/depends.py:2: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative usesimport imp
Traceback (most recent call last):File "testmnist.py", line 7, in <module>from paddle.fluid.dygraph.nn import FC
ImportError: cannot import name 'FC' from 'paddle.fluid.dygraph.nn' (/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/nn.py)

2、为什么出现错误?

import paddle
import paddle.fluid as fluid
import numpy as np
import os
from PIL import Imageprintf(dir(paddle.fluid.dygraph))

  在 fluid.dygraph 给出了了dygraph中的包含的内容。

▲ 图2.2.1 fluid.dygraph中 FC的定义

  但是在上面给出的fluid.dygraph测试过程中,可以看到其中并不包含“FC”。

['AmpScaler', 'BatchNorm', 'BilinearTensorProduct', 'Conv2D', 'Conv2DTranspose', 'Conv3D', 'Conv3DTranspose', 'CosineDecay', 'DataParallel', 'Dropout', 'Embedding', 'ExponentialDecay', 'Flatten', 'GRUCell', 'GRUUnit', 'GroupNorm', 'InstanceNorm', 'InverseTimeDecay', 'LSTMCell', 'LambdaDecay', 'Layer', 'LayerList', 'LayerNorm', 'Linear', 'LinearLrWarmup', 'MultiStepDecay', 'NCE', 'NaturalExpDecay', 'NoamDecay', 'OptimizerState', 'PRelu', 'ParallelEnv', 'ParameterList', 'PiecewiseDecay', 'PolynomialDecay', 'Pool2D', 'ProgramTranslator', 'ReduceLROnPlateau', 'Sequential', 'SpectralNorm', 'StaticModelRunner', 'StepDecay', 'TracedLayer', 'Tracer', 'TranslatedLayer', 'TreeConv', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'amp', 'amp_decorate', 'amp_guard', 'base', 'checkpoint', 'container', 'core', 'declarative', 'defaultdict', 'disable_dygraph', 'dygraph_to_static', 'dygraph_to_static_func', 'enable_dygraph', 'enabled', 'framework', 'grad', 'guard', 'inplace_apis_in_dygraph_only', 'inplace_utils', 'io', 'jit', 'layer_hooks', 'layer_object_helper', 'layers', 'learning_rate_scheduler', 'load', 'load_dygraph', 'math_op_patch', 'monkey_patch_math_varbase', 'nn', 'no_grad', 'no_grad_', 'not_to_static', 'parallel', 'parallel_helper', 'prepare_context', 'print_function', 'rnn', 'save', 'save_dygraph', 'set_code_level', 'set_verbosity', 'six', 'static_runner', 'to_variable', 'tracer', 'varbase_patch_methods']

(1)修改方法

  将原来的 FC 修改为 “fc”,问题解决了。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TESTMNIST.PY                 -- by Dr. ZhuoQing 2021-12-09
#
# Note:
#============================================================from headm import *import paddle
import paddle.fluid as fluid
#from paddle.fluid.dygraph.nn import fc
import numpy as np
import os
from PIL import Image#------------------------------------------------------------#printf(dir(paddle.fluid.dygraph))#------------------------------------------------------------
#        END OF FILE : TESTMNIST.PY
#============================================================
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/setuptools/depends.py:2: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative usesimport imp

(2)进一步探讨

  通过以下命令,可以获得当前paddle的版本:

printf(paddle.__version__)

  当前的paddle的版本: 2.2.0

  根据 Paddle 1.8 与 Paddle 2.0 API映射表 给出的Paddle2.0 API的修改。原来对应的Paddle1.8中的 paddle.fluid.layers.fc 已经被以下两个函数替代:

  • 动态图paddle.nn.functional.linear
  • 静态图paddle.static.nn.fc

(3)最好的解决方案

根据百度的钱芳的介绍,最好的避免这类问题,就是直接跟随者百度的AI Studio的教学视频,摘取其中的代码进行测试,可以避免这类书籍更新不够的问题。

▲ 图2.2.2 百度 AI Studio 入门教学视频中的代码

3、下载数据库

trainset = paddle.dataset.mnist.train()
train_reader = paddle.batch(trainset, batch_size=8)
[==================================================]t/train-images-idx3-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-images-idx3-ubyte.gz
[==================================================]t/train-labels-idx1-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-labels-idx1-ubyte.gz
Cache file /home/aistudio/.cache/paddle/dataset/mnist/train-images-idx3-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-images-idx3-ubyte.gz
Begin to download
item 2421/2421 [============================>.] - ETA: 0s - 475us/item
Download finished
Cache file /home/aistudio/.cache/paddle/dataset/mnist/train-labels-idx1-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-labels-idx1-ubyte.gz
Begin to download
item 8/8 [============================>.] - ETA: 0s - 775us/item
Download finished

(1)数据库存储地址

  下载的数据库存储在:

/home/aistudio/.cache/paddle/dataset/mnist
train-images-idx3-ubyte.gz
train-labels-idx1-ubyte.gz

三、显示图片

from headm import *from headm import *import paddle
import paddle.fluid as fluid
import numpy as np
import os
from PIL import Imagetrainset = paddle.dataset.mnist.train()
train_reader = paddle.batch(trainset, batch_size=8)for batch_id, data in enumerate(train_reader()):img_data = array([x[0] for x in data]).astype('float32')label_data = array([x[1] for x in data]).astype('float32')print(img_data.shape)for i in range(8):img = img_data[i].reshape(28, 28)plt.clf()plt.figure(figsize=(10, 6))plt.imshow(img)plt.axis('on')plt.title('image')plt.show()break

▲ 图2.3.1 MNIST前八个字符的图片

  数据为:

▲ 图2.3.2 MNIST 数据

  从打印结果看,从数据加载器train_loader()中读取一次数据,可以得到形状为(8, 784)的图像数据和形状为(8,)的标签数据。其中,形状中的数字8与设置的batch_size大小对应,784为MINIST数据集中每个图像的像素大小(28*28)。

  此外,从打印的图像数据来看,图像数据的范围是[-1, 1],表明这是已经完成图像归一化后的图像数据,并且空白背景部分的值是-1。将图像数据反归一化,并使用matplotlib工具包将其显示出来,如 图2 所示。图片显示的数字是5,和对应标签数字一致。

四、飞浆API

  在 使用指南 中可以看到对应的飞浆的API。

※ 总  结 ※


  在上面测试过程中总是时不常碰到版本不兼容的问题。这还是都是在AI STudio环境测试的结果。不知为什么,现在手头的版本还是没有能够反映出最终的软件的版本的情况下。

  今天参加了 百度举办的 WAVE SUMMIT"产教融合,人才共育" ,询问了“钱芳”,她建议还是结合现在网络上的教程, 手写数字识别案例(上) ,其中有最新的修改后的内容。避免教科书上的尚未进行修正的内容。

▲ 图3.1 PaddlePaddle AI Studio的讲解


■ 相关文献链接:

  • 零基础实践深度学习
  • 百度架构师手把手带你零基础入门深度学习
  • 百度架构师手把手带你零基础入门深度学习
  • fluid.dygraph
  • Paddle 1.8 与 Paddle 2.0 API映射表
  • paddle.fluid.layers.fc
  • paddle.nn.functional.linear
  • paddle.static.nn.fc
  • 使用指南
  • 人工智能助力全国大学智能车竞赛
  • 手写数字识别案例(上)

● 相关图表链接:

  • 图1.2 深度学习零基础实践
  • 图1.1.1 手写数字识别任务
  • 图1.2.1 MNIST数据集合
  • 图1.3.1 利用PaddlePaddle构建NN过程
  • 图1.3.2 利用PaddlePaddle构建NN的代码示例
  • 图1.1 “横纵式”教学方法-纵向极简实现方案
  • 图2.1.1 MNIST手写体工程
  • 图2.1.2 进入工程之后看到的数据文件
  • 图2.1.3 进入工程之后看到的数据文件
  • 图2.1.4 通过鼠标右键加压缩数据文件
  • 图2.2.1 fluid.dygraph中 FC的定义
  • 图2.3.1 MNIST前八个字符的图片
  • 图2.3.2 MNIST 数据

在哪里能找到最后的版本的示例程序? AI Studio-MNIST相关推荐

  1. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  2. ubuntu:如何找到当前系统版本下对应的软件包下载地址

    ubuntu在没有联网的情况下,安装软件需自己通过网站下载deb软件包,那么如何找到当前系统版本对应的软件包的下载地址,确保软件包版本与系统版本匹配呢?可以通过/etc/apt/source.list ...

  3. 在使用Vs2013打开Vs2008的解决方案时出现了以下错误:此版本的应用程序不支持其项目类型(.csproj)...

    在使用Vs2013打开Vs2008的解决方案时出现了以下错误: 无法打开 因为此版本的应用程序不支持其项目类型(.csproj). 在网络上找到解决方案: 命令行或者Vs自带的命令提示符输入:deve ...

  4. google play支付提示“此版本的应用程序未配置为通过Google Play结算。有关详情,请访问帮助中心。”

    [google play支付] 提示:遇到错误提示"此版本的应用程序未配置为通过Google Play结算.有关详情,请访问帮助中心." 原因是,当前版本VersionCode比上 ...

  5. Oracle各种版本下“示例数据库的创建”的创建

    Oracle各种版本下"示例数据库的创建"的创建 1.插入示例方案 PDB :使用 DBCA 在 12.1.0.2 中,可以使用 DBCA 图形化界面来创建示例 PDB . 您可以 ...

  6. 因为此版本的应用程序不支持其项目类型(.vcproj)的解决方法

    VS2012有时会提示无法打开"....\project1vcproj",因为此版本的应用程序不支持其项目类型(.vcproj).若要打开它,请使用支持此类型项目的版本. 解决方法 ...

  7. 软件Release版本异常捕获程序(BugReport)

    软件Release版本异常捕获程序(BugReport) http://wangzai9931.blog.51cto.com/168627/164084 2009-06-08 23:09:43 标签: ...

  8. 在Vista以上版本运行WTL程序,有时候会提示“这个程序可能安装补正确...”的错误...

    在Win7/Vista下,如何以兼容模式运行exe? https://msdn.microsoft.com/en-us/library/dd371711(VS.85).aspx 问题描述:在Vista ...

  9. 无法打开csproj,因为此版本的应用程序不支持其项目类型 csproj

    场景:在电脑上安装了 server_2008_r2_standard_x64 版本之后,开始里面就有了Microsoft Visual Studio 2008目录,于是我直接去打 vs2008程序的  ...

最新文章

  1. 深入理解Java虚拟机(第三弹)- JVM 内存分配与回收策略原理,从此告别 JVM 内存分配文盲
  2. Hi3516A开发--目录分析
  3. 排除瓶颈和加速django项目
  4. 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
  5. 华为鸿蒙不再孤,华为鸿蒙OS系统不再孤单!又一款国产系统启动内测:再掀国产替代化...
  6. vscode 标准库位置_如何在VSCode中使用标准
  7. C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
  8. C/C++[codeup 2026]日期类
  9. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks论文翻译
  10. medusa安装和简单使用
  11. js网页特效动画(筋斗云案例)
  12. druid监控页面 关闭_druid-springboot-starter默认启用监控页面,公网项目可能外泄DB信息...
  13. mysql show processlist整理
  14. Alarm机制-学习记录
  15. 第1章第17节:如何使用备注功能对内容进行注释补充 [PowerPoint精美幻灯片实战教程]
  16. scale与zoom的差异
  17. free ***是什么
  18. OpenCV | Mat类的copyT、clone、=赋值的区别
  19. win10系统u盘安装单个文件超过4g解决办法
  20. 力扣解法汇总917-仅仅反转字母

热门文章

  1. 从零到百亿互联网金融架构发展史---架构变迁
  2. (六)java多线程之ReadWriteLock
  3. 第28篇 js中let和var
  4. 如何对软件项目团队成员进行角色和岗位的划分
  5. XPath实例教程四、[]的作用
  6. SQL Server 2005——下一代的数据管理和分析软件[转]
  7. 《oracle大型数据库系统在AIX/unix上的实战详解》讨论31: oracle、sybase 数据库的不同访问...
  8. 《JavaScript设计与开发新思维》——1.7 JavaScript编程目标
  9. Asp.NetCore1.1版本没了project.json,这样来生成跨平台包
  10. [Android开发常见问题-12] Android开发中debug.keystore如何使用。