Keras入门实战(1):MNIST手写数字分类

目录

1)首先我们加载Keras中的数据集

2)网络架构

3)选择编译(compile参数)

4)准备图像数据

5) 训练模型

6)测试数据


前面的博客中已经介绍了如何在Ubuntu下安装Keras深度学习框架。

现在我们使用 Keras 库来学习手写数字分类。

我们这里要解决的问题是:将手写数字的灰度图像(28 像素×28 像素)划分到 10 个类别 中(0~9)。我们将使用 MNIST 数据集,它是机器学习领域的一个经典数据集,其历史几乎和这 个领域一样长,而且已被人们深入研究。这个数据集包含 60 000 张训练图像和 10 000 张测试图 像,由美国国家标准与技术研究院(National Institute of Standards and Technology,即 MNIST 中 的 NIST)在 20 世纪 80 年代收集得到。你可以将“解决”MNIST 问题看作深度学习的“Hello World”。下图为MNIST图像数字样本:

1)首先我们加载Keras中的数据集

Keras已经包含了很多数据集,我们本例子中的数据集也包含在其中:

[1]

from keras.datasets import mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
这里要多下载几次才可能下载成功,不需要翻墙。

我们来看一下训练集数据:

[2]

train_images.shape
(60000, 28, 28)

这里显示的是我们有60000个训练样本,其中每个样本是28X28像素的图像。

[3]

train_labels
array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)

这是训练集的标签。

接下来的工作流程如下:

  • 首先,将训练数据(train_images 和 train_labels)输入神经网络;
  • 其次,网络学习将图像和标签关联在一起;
  • 最后,网络对 test_images 生成预测, 而我们将验证这些预测与 test_labels 中的标签是否匹配。

2)网络架构

[4]

from keras import models
from keras import layers​network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

神经网络的核心组件是层(layer),它是一种数据处理模块,你可以将它看成数据过滤器。 进去一些数据,出来的数据变得更加有用。具体来说,层从输入数据中提取表示——我们期望这种表示有助于解决手头的问题。大多数深度学习都是将简单的层链接起来,从而实现渐进式 的数据蒸馏(data distillation)。深度学习模型就像是数据处理的筛子,包含一系列越来越精细的数据过滤器(即层)。

本例中的网络包含 2 个 Dense 层它们是密集连接(也叫全连接)的神经层第二层(也是最后一层)是一个 10 路 softmax 层,它将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率。

3)选择编译(compile参数)

其中用到的主要有以下三个参数:

  • 损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进。

  • 优化器(optimizer):基于训练数据和损失函数来更新网络的机制。

  • 在训练和测试过程中需要监控的指标(metric):本例只关心精度,即正确分类的图像所占的比例。

[5]

network.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

4)准备图像数据

在开始训练之前,我们将对数据进行预处理,将其变换为网络要求的形状,并缩放到所有值都在 [0, 1] 区间。比如,之前训练图像保存在一个 uint8 类型的数组中,其形状为 (60000, 28, 28),取值区间为 [0, 255]。我们需要将其变换为一个 float32 数组,其形状为 (60000, 28 * 28),取值范围为 0~1。

[6]

train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255​test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

我们还需要对标签进行分类编码。

[7]

from keras.utils import to_categoricaltrain_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

5)训练模型

现在我们准备开始训练网络,在 Keras 中这一步是通过调用网络的 fit 方法来完成 。

[8]

network.fit(train_images, train_labels, epochs=5, batch_size=128)

训练过程中会显示两个数字:一个是网络在训练数据上的损失(loss),另一个是网络在 训练数据上的精度(acc)。 现在我们来检查一下模型在测试集上的性能。

6)测试数据

[9]

test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

这样一个简单的全连接神经网络模型,精度为97%。第一个例子到这里就结束了。你刚刚看到了如何构建和训练一个神经网络,用不到 20 行的 Python 代码对手写数字进行分类。接下来我们需要学习张量(输入网络的数据存储对象)、张量运算(层的组成要素)和梯度下降(可以让网络从训练样本中进行学习)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是BNF EBNF 巴科斯范式及其扩展 BNF Augmented BNF

什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF 什么是巴科斯范式?   巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。   现在&…

root 进入ssh 出现问题

用root输入下面命令,一直让输入密码,并提示错误 ssh localhost那是因为系统默认禁止root用户登录ssh 首先,CtrlC退出密码输入界面:然后输入:su - 然后,编辑sshd_config文件,输入:…

【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)

题干: 有一个仓库被分成n*m 个矩形区域,如果两个区域有一条公共边,则被认为这两个区域相邻。包裹都放在一个区域中,剩余的区域或者空闲或者被集装箱占有,这是因为集装箱太重,仓库管理员不能将集装箱搬走。…

机器学习笔记(3):线性代数回顾

目录 1)Matrices and vectors 2)Addition and scalar multiplication 3)Matrix-vector multiplication 4)Matrix-matrix multiplication 5)Matrix multiplication properties 6)Inverse and transpos…

hadoop 安装

Hadoop单机和伪分布式安装 更新apt 用root用户登录 先更新一下 apt apt-get update然后安装vim apt-get install vim安装VMware tools tools 安装 安装SSH、配置SSH无密码登陆 单节点模式都需要用到 SSH 登陆,Ubuntu 默认已安装了 SSH client,此…

机器学习笔记(4):多变量线性回归

目录 1)Multiple Features 2)Gradient descent for multiple variables 3)Gradient descent in practice 1: Feature Scaling 4)Gradient descent in pratice2: Learning rate 5)Features and polynomial regress…

【POJ - 2942】Knights of the Round Table(点双连通分量,二分图判断奇环奇圈)

题干: Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore, it is not very surprising that in recent years the kingdom of King …

zookeeper单节点部署

hadoop 安装 在/install-package目录下查看zookeeper的安装包 本文中安装的是zookeeper-3.4.12.tar.gz 下方为百度云链接 链接:https://pan.baidu.com/s/1bzq4ILH41owtS__3tBCcRQ 提取码:6q4r 把下载好的zookeeper-3.4.12.tar.gz 放到/install-packa…

机器学习笔记(五):逻辑回归

目录 1)Classification 2)Hypothesis Representation 3)Decision boundary 4)Cost function 5)Simplified cost function and gradient descent 6)Multi-class classification:One-vs-all 7&#xf…

xrdp完美实现Windows远程访问Ubuntu 16.04

前言: 在很多场景下,我们需要远程连接到Linux服务器(本文是Ubuntu),传统的连接主要分为两种。 第一种:通过SSH服务(使用xshell等工具)来远程访问,编写终端命令,不过这个是无界面的&a…

【HDU - 6203】ping ping ping(lca+贪心思想,对lca排序,树状数组差分)

题干: 给出一个n1个点的树,以及p个点对,需要断开一些点,使得这p个点对路径不连通。输出应该断开的最少点数。 解题报告: 从那p个点对入手的话:首先考虑只有一对点的话,肯定是这条路径上的随便…

机器学习笔记(六):正则化

目录 1)The problem of overfitting 2)Cost function 3)Regularized linear regression 4)Regularized logistic regression 我们已经学习了线性回归和逻辑回归算法,已经可以有效解决很多问题,但是在实…

Hbase单节点安装

zookeeper单节点部署 实验环境 操作系统:Ubuntu 16.04 Hadoop:Hadoop 2.7.5 Zookeeper:zookeeper 3.4.12 Java:java version 1.8.0 到/install-package目录下查看hbase安装包 #>ls /install-package本文中用的是hbase-1…

ROS 常用命令字典

版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5761448.html 该博文适合已经具备一定的ROS编程基础的人,快速查看ROS相关指令。 本文持续更新中,望关注收藏,一起改进... 创建 ROS 工作…

【HDU - 3966】Aragorn's Story(树链剖分,模板题)

题干: Our protagonist is the handsome human prince Aragorn comes from The Lord of the Rings. One day Aragorn finds a lot of enemies who want to invade his kingdom. As Aragorn knows, the enemy has N camps out of his kingdom and M edges connect t…

机器学习笔记(七):神经网络:表示

目录 1)Non-linear hypotheses 2)Model representation 1 3)Model representation 2 4)Examples and intuitions 1 5)Examples and intuitions 2 6)Multi-class classification 1)Non-lin…

ROS入门_1.10 理解ROS服务和参数

目录 ROS Services使用rosservice rosservice listrosservice typerosservice call Using rosparam rosparam listrosparam set and rosparam getrosparam dump and rosparam load 本教程假设从前一教程启动的turtlesim_node仍在运行,现在我们来看看turtlesim提供了…

1.Introduction and Evaluation

感谢七月在线罗老师和吴同学! 最近报了七月在线的《推荐系统实战》班,根据上课资料和思维导图整理了这篇笔记! 1)推荐系统介绍 思维导图如下,其中需要掌握的是推荐系统存在的前提:信息过载和用户需求不明…

【ZOJ - 2968 】Difference Game (贪心,思维模拟)

题干: Now you are going to play an interesting game. In this game, you are given two groups of distinct integers and C coins. The two groups, named Ga and Gbrespectively, are not empty and contain the same number of integers at first. Each time…

使用 rqt_console 和 roslaunch

Description:本教程介绍如何使用 rqt_console 和 rqt_logger_level 进行调试,以及如何使用 roslaunch 同时运行多个节点。早期版本中的 rqt 工具并不完善,因此,如果你使用的是“ROS fuerte”或更早期的版本,请同时参考 这个页面 学…