2021-05-19 人工智能图片识别

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

任务:输入: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,不准

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1379977.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能——图搜索

一.数据驱动和目标驱动搜索 以下情况建议使用目标驱动搜索: (1)目标或假设是在问题陈述中给出的。例如定理的证明,目标就是定理。 (2)与问题数据匹配的规则非常多,会产生大量分支…

手机声音同步到另一部手机_手机数据同步、丢失不再可怕

日常生活中,我们使用手机最大的难题可能就是手机资料的丢失了。熊孩子玩手机在你不注意的情况下把照片删掉了,换新手机资料的同步更是麻烦,还有甚者就是手机丢了,里面的数据资料全面化为泡影,想哭都没地儿哭。而现在不…

互联网日报 | 华为发布首款商用台式机;京东健康正式登陆港交所;苹果推出首款头戴式耳机...

今日看点 ✦ 京东健康港交所上市,募资265亿港元、总市值超3400亿港元 ✦ 华为发布首款商用台式机,商用PC布局更进一步 ✦ 淘宝特价版注册“1元更香”商标,每月最后一周定为“1元更香节” ✦ 大众汽车(安徽)正式揭牌&am…

富士康登陆A股 工业互联网的盛宴

富士康工业互联网(FII)于6月8日登陆A股,开盘大涨44.01%,报19.83元,目前FII总市值达3905亿元,超过海康威视、美的集团等企业,位居A股市值第14名,同时也成为A股市值最高的科技企业。 …

要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...

关注并标星星CSDN云计算 每周三次,打卡即read 更快、更全了解泛云圈精彩news go go go 大家好!偶是要闻君。活动多多、新闻不少,精神饱满的周一,学起来!!! 文/要闻君 一年一度,十分…

LVS/DR+Keepalived负载均衡实战(一)

引言 负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了,当听到此概念的第一反应是想到举世闻名的nginx,但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了,因为对于一般系统来说,很多应用场合中采用nginx基本已经满足需求&a…

【Java】数据交换 Json 和 异步请求 Ajax

🎄欢迎来到边境矢梦的csdn博文,本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下&#…

go语言从0基础到安全项目开发实战

一.环境搭建并helloworld 搭建环境比较简单 1.1安装SDK 到以下链接下 Go下载 - Go语言中文网 - Golang中文社区 下载windows版本64位zip包 https://studygolang.com/dl/golang/go1.20.7.windows-amd64.zip 1.2配置环境变量 不配置的话就只能在bin目录下才能运行go命令 …

linux安装ftp

一、安装 参考博客 https://blog.csdn.net/dafeigecsdn/article/details/126518069 rpm -qa |grep vsftpd # 查看是否安装ftp yum -y install vsftpd # 安装vsftpuseradd -d /home/lanren312 lanren312 # 指定在/home目录下创建用户 passwd lanren312 # 给用户设置密码 # 输…

20220209学速写

抖音上学速写感觉不太行呀。虽然看起来简单但感觉手很笨,感觉从基础入门后开始讲的,而我还缺少基础。。。

人物速写示范(30张图)

人物速写示范(30张图) 2007/01/11 10:59 扫描自《叶老师速写教学示范》——湖北美术出版社叶军,1964年生于湖北沙市,毕业于湖北美术学院,学士学位。现为湖北美术学院副教授,中国画系副主任,研究…

学习速写的方法有哪些?如何快速学会速写?

本文由“学美术上美术集网校”原创,图片素材来自网络,仅供学习分享 学习速写的方法有哪些?如何快速学会速写?很多初学绘画者,包括有些已经进行过一些素描训练的学画青少年想画速写,总感到无从下手。在与这些初学绘画者的接触中,我总是尽量告诉他们一些速写方面的训练方…

Vscode 速写 HTML

Vscode 速写 HTML 文章目录 Vscode 速写 HTML1. 快速生成HTML结构2. 快速生成标签3. 生成指定标签4. 插件 1. 快速生成HTML结构 输入 ! 后按 Tab <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&qu…

速写篇—速写打型需要几步?这5步准确起型~

速写怎么打好型&#xff1f;速写打型需要哪些步骤&#xff1f;很多小伙伴在学习美术速写的时候都会遇到各种问题今天美术集网校带大家了解下速写如何打好型&#xff1a; 画速写人物真的很难吗?如果你画的人物得不到高分&#xff0c;你可能需要考虑一下是不是打形没有画好&…

速写想要拿高分?这些要点能提分~

速写怎么画&#xff1f;怎么画速写才能提高分&#xff1f;很多小伙伴在学习美术都会遇到各种问题今天美术集网校带大家了解下速写提高分的方法吧&#xff1a; 速写想要取得高分&#xff0c;首先就要先突破难点&#xff0c;找到短板&#xff0c;逐个克服才能更好的把握速写。 首…

学速写的步骤来啦,零基础学习更简单

最近美术集小编收到了很多新手学习速写的问题点&#xff0c;想要学习速写&#xff0c;应该从哪些步骤开始呢&#xff1f;今天广州美术集网校就帮大家整理了一些画速写的步骤&#xff0c;掌握好这些步骤&#xff0c;速写的学习就像开了加速器&#xff1a; ​ 第一&#xff0c;我…

先别急着练速写,人物慢写才是第一步

人物慢写怎么画&#xff1f;人物慢写和速写的区别在哪里&#xff1f;很多小伙伴在学习速写都会遇到各种问题今天美术集网校带大家了解下人物速写和慢写的区别之处吧&#xff1a; ​ 想要学好速写&#xff0c;我们就要先了解速写&#xff0c;慢写是学习速写的第一步&#xff0c…

25个速写素描Procreate笔刷

这套画笔套装共包含25支Procreate画笔&#xff0c;其中包括9个线条笔刷、7支孵化笔刷、5个条纹画笔、煤炭画笔和3个填充画笔。每支笔都对笔的压力和倾斜度非常敏感&#xff0c;能够精确地捕捉你的绘画动作&#xff0c;让你轻松实现所需的效果。

风格速写(代码敲累了)

就这样吧&#xff0c;外面下着雨&#xff0c;电脑待着机&#xff0c; 而我充着电