手写数字识别案例(第一版)

任务:输入:28*28的灰度图片

输出:0-9的数字标签

样本量:6万训练样本,1万测试样本

数据处理:读取数据和预处理操作

模型设计:网络结构

训练配置:优化器和计算资源配置

训练过程:循环调用训练过程,前向计算+损失函数(优化目标)+后向传播

保存模型:将训练好的模型保存

数据处理:

train_reader=paddle.batch(paddle.dataset.mnist.train(), batch_size=8)

paddle.dataset.mnist.train()取出mnist训练的数据集   使用paddle.batch把它变成一个可以batch输入的形式  batch_size指定参数

for batch_id ,data in enumerate(train_reader()):

#获取图像数据,并转化为float32类型的数组

img_data=np.array[x[0] for x in data]).astype('float32')

#获取图像标签数据

label_data=np.array(x[1] for x in data]).astype('float32')

#打印数据形状

print("图像数据形状和对应数据为:",img_data.shape, img_data[0])

print("图像标签形状和对应数据为:",label_data.shape, label_date[0])

break

图像数据形状和对应数据为:(8,784)

图像标签形状和对应数据为:(8,)5.0

一个批次有8个图片和8个标签,这次读取的数字标签是5

img=np.array(img_data[0]+1)*127.5(图片打印时候要做反归一化)

模型设计,训练,测试

模型设计:首次采用已知模型进行预测

若采用房价预测网络模型(线性回归模型,一层神经网络)

我们输入的是28*28的灰色图片,一层神经网络对于像素的位置进行单层排列,无法捕捉图像的内容(1*784)

# 定义mnist数据识别网络结构,同房价预测网络

class MNIST(fluid.dygraph.Layer):

def __init__(self,name_scope):

super(MNIST, self).__init__(name_scope)

name_scope=self.full_name()

# 定义一层全连接层,输出维度是1,激活函数为none

self.fc = Linear(input_dim=784, output_dim=1,act=None)

# 定义网络结构的前向计算过程

def forward(self, inputs):

outputs = self.fc(inputs)

return outputs

模型训练:

训练配置

训练配置需要先生成模型实例(设为“训练”状态),再设置优化算法和学习率(使用随机梯度下降SGD,学习率设置为0.001),实现方法如下所示。

通过with语句创建一个dygraph运行的context

动态图下的一些操作需要在guard下进行

with fluid.dygraph.guard():

model =MINST("mnist")

# 启动训练模式

model train()

# 加载训练集 batch_size 设为 16

train_loader=paddle.batch(paddle.dataset.mnist.train(),batch_size=16)

# 定义优化器,使用随机梯度下降SGD优化器,学习率设置为0.001

optinizer= fluid.optinizer.SGDOptimizer(learning_rate=0.001, parameters=model.parameters())

EPOCH_NUM=10

训练过程

训练过程采用二层循环嵌套方式,训练完成后需要保存模型参数,以便后续使用。

  • 内层循环:负责整个数据集的一次遍历,遍历数据集采用分批次(batch)方式。
  • 外层循环:定义遍历数据集的次数,本次训练中外层循环10次,通过参数EPOCH_NUM设置

for epoch_id in range(EPOCH_NUM):

for batch_id, data in enumerate(train_loader()):

#准备数据,格式需要转化为符合框架要求的

img_data=np.array[x[0] for x in data]).astype('float32')

label_data=np.array(x[1] for x in data]).astype('float32').reshape(-1,1)   *为了loss的计算,label的最后一维需要为-1

#将数据转化为飞桨动态图片格式

image= fluid.dygraph.to_variable(image_data)

label=fluid.dygraph.to_variable(image_data)

#前向计算的过程 predicts = model(images)

# 计算损失 loss = F.square_error_cost(predicts, labels)

avg_loss = paddle.mean(loss)

#每训练了1000批次的数据,打印下当前Loss的情况

if batch_id % 1000 == 0:

print("epoch_id: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, avg_loss.numpy()))

#后向传播,更新参数的过程

avg_loss.backward()

opt.step()

opt.clear_grad()

#保存模型

fluid.save_dygraph(model.state_dict(),'mnist')

结论:从训练过程中损失所发生的变化可以发现,虽然损失整体上在降低,但到训练的最后一轮,损失函数值依然较高。可以猜测手写

数字识别完全复用房价预测的代码,训练效果并不好。接下来我们通过模型测试,获取模型训练的真实效果。

模型测试

# 读取一张本地的样例图片,转变成模型输入的格式

def load_image(img_path):

# 从img_path中读取图像,并转为灰度图

im = Image.open(img_path).convert('L')

print(np.array(im)) im = im.resize((28, 28), Image.ANTIALIAS)

im = np.array(im).reshape(1, -1).astype(np.float32)

# 图像归一化,保持和数据集的数据范围一致

im = im / 127.5 - 1 return im

# 定义预测过程

model = MNIST()

params_file_path = 'mnist.pdparams'

img_path = './work/example_0.png'

# 加载模型参数

param_dict = paddle.load(params_file_path)

model.load_dict(param_dict)

# 灌入数据

model.eval()

tensor_img = load_image(img_path)

result = model(paddle.to_tensor(tensor_img))

# 预测输出取整,即为预测的数字,打印结果

print("本次预测的数字是", result.numpy().astype('int32'))

预测为-1,不准

2021-05-19 人工智能图片识别相关推荐

  1. 《惢客创业日记》2021.05.19(周三)如果你是司机,该怎么办?

    今天看到了一则新闻,所描述的事件也是属于诚信的范畴,而且,也属于惢客要解决的"法律够不着,道德又管不了"的领域. 说的是一位女乘客在打车时,坐在后排,把自己的脚放在了前面座位的头枕 ...

  2. 快速入门开发实现订单类图片识别结果抽象解析

    一.背景 面对订单数据纸质文件或图片,仅靠人眼识别的话效率很低,需引入机器学习来识别和解析图片以提高效率.当前市面上已有收费的图片识别服务,包括阿里.百度等,识别效果较好,但针对订单类图片,不仅要关注 ...

  3. 最新最全垃圾分类小程序,含图片识别和语音识别,视频播放,垃圾分类搜索,垃圾知识答题,积分排行,文章推荐,收藏文章等功能

    一,技术选型和效果图 1,技术选型 1-1,前端 小程序原生框架 css JavaScript 1-2,管理后台 云开发Cms内容管理系统 web网页 百度开发者控制台 1-3,数据后台 小程序云开发 ...

  4. plt保存图片_人工智能Keras CNN卷积神经网络的图片识别模型训练

    CNN卷积神经网络是人工智能的开端,CNN卷积神经网络让计算机能够认识图片,文字,甚至音频与视频.CNN卷积神经网络的基础知识,可以参考:CNN卷积神经网络 LetNet体系结构是卷积神经网络的&qu ...

  5. cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...

    上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...

  6. python 识图点击_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

  7. Python图片识别——人工智能篇

    目录  一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于P ...

  8. python智能识别 病虫草害_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

  9. python识图 web_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

最新文章

  1. 【Java基础】字符串与数组
  2. Linux程序开机启动
  3. Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)
  4. pythonsuper函数_怎么使用python super函数调用父类
  5. 【opencv学习】【形态学】【腐蚀与膨胀】【开运算与闭运算】【礼帽和黑帽】
  6. Python学习入门4:学习Python无从下手?最好的免费资源想要拿走
  7. C++中数组定义及初始化
  8. Rem实现自适应初体验
  9. Cglib 代码生成库使用快速入门
  10. chrome扩展插件推荐:FeHelper格式化json
  11. mysql为什么要重建索引_深入理解重建索引
  12. python 城市地图_Python查询一个城市的谷歌地图的经度和纬度
  13. php word替换换行符,word换行替换
  14. web页面播放实时视频流
  15. pygame笔记(更新中
  16. 章节1 计算机体系结构
  17. T007V-采购订单税码对应的税率所在后台表
  18. 快速搭建一个APMT265树莓派无人机
  19. UE4 4.26 Pixel Streaming 应用场景
  20. 使用javascript实现表单校验(聚焦onfocus()和离焦onblur()以及在指定位置输出innerHTML='')

热门文章

  1. 顺序读写和随机读写区别和实现
  2. 游戏开发第一阶段笔记(3):C语言 指针与数组
  3. Find My技术|智能防丢还得看苹果Find My技术
  4. 宇宙飞船打外星人(python-2D游戏开发)
  5. Centos7.5下rpm方式安装gitlab-ce
  6. 提升搬砖效率的神兵利器
  7. jaudiotagger获取MP3文件信息及封面图片
  8. 苏州市户籍准入登记暂行办法
  9. Unity脚本api网址
  10. 系统资源监控nmon