广告
返回顶部
首页 > 资讯 > 后端开发 > Python >MNIST机器学习入门
  • 360
分享到

MNIST机器学习入门

入门机器MNIST 2023-01-31 07:01:13 360人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。 MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签

当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。

MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签,告诉我们这个是数字几。

详细内容请参考:Http://wiki.jikexueyuan.com/p...

文章末尾会给出相关python代码,运行环境是python3.6+anaconda+Tensorflow,具体环境搭建本文不做阐述。

一、MNIST简介

官网链接:http://yann.lecun.com/exdb/mn...

这个MNIST数据库是一个手写数字的数据库,它提供了六万的训练集和一万的测试集。

它的图片是被规范处理过的,是一张被放在中间部位的28px*28px的灰度图。

总共4个文件:

train-images-idx3-ubyte: training set images
train-labels-idx1-ubyte: training set labels
t10k-images-idx3-ubyte: test set images
t10k-labels-idx1-ubyte: test set labels

图片都被转成二进制放到了文件里面,

所以,每一个文件头部几个字节都记录着这些图片的信息,然后才是储存的图片信息。

二、tensorflow手写数字识别步骤

1、 将要识别的图片转为灰度图,并且转化为28*28矩阵

2、 将28*28的矩阵转换成1维矩阵

3、 用一个1*10的向量代表标签,因为数字是0~9,如数字1对应的矩阵就是:[0,1,0,0,0,0,0,0,0,0]

4、 softmax回归预测图片是哪个数字的概率。

这里顺带说一下还有一个回归:loGIStic,因为这里我们表示的状态不只两种,因此需要使用softmax

三、标签介绍(有监督学习/无监督学习)

监督学习:利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程,也称为监督训练或有教师学习举个例子,MNIST自带了训练图片和训练标签,每张图片都有一个对应的标签,比如这张图片是1,标签也就是1,用他们训练程序,之后程序也就能识别测试集中的图片了,比如给定一张2的图片,它能预测出他是2

无监督学习:其中很重要的一类叫聚类举个例子,如果MNIST中只有训练图片,没有标签,我们的程序能够根据图片的不同特征,将他们分类,但是并不知道他们具体是几,这个其实就是“聚类”

标签的表示

在这里标签的表示方式有些特殊,它也是使用了一个一维数组,而不是单纯的数字,上面也说了,他是一个一位数组,0表示方法[1,0,0,0,0,0,0,0,0,0],1表示[0,1,0,0,0,0,0,0,0,0],………,

主要原因其实是这样的,因为softmax回归处理后会生成一个1*10的数组,数组[0,0]的数字表示预测的这张图片是0的概率,[0,1]则表示这张图片表示是1的概率……以此类推,这个数组表示的就是这张图片是哪个数字的概率(已经归一化),

因此,实际上,概率最大的那个数字就是我们所预测的值。两者对应来看,标准的标签就是表示图片对应数字的概率为100%,而表示其它数字的概率为0,举个例子,0表示[1,0,0,0,0,0,0,0,0,0],可以理解为它表示0的概率为100%,而表示别的数字的概率为0.

softmax回归

这是一个分类器,可以认为是Logistic回归的扩展,Logistic大家应该都听说过,就是生物学上的S型曲线,它只能分两类,用0和1表示,这个用来表示答题对错之类只有两种状态的问题时足够了,但是像这里的MNIST要把它分成10类,就必须用softmax来进行分类了。

P(y=0)=p0,P(y=1)=p1,p(y=2)=p2……P(y=9)=p9.这些表示预测为数字i的概率,(跟上面标签的格式正好对应起来了),它们的和为1,即 ∑(pi)=1。

tensorflow实现了这个函数,我们直接调用这个softmax函数即可,对于原理,可以参考下面的引文,这里只说一下我们这个MNIST demo要用softmax做什么。

(注:每一个神经元都可以接收来自网络中其他神经元的一个或多个输入信号,神经元与神经元之间都对应着连接权值,所有的输入加权和决定该神经元是处于激活还是抑制状态。感知器网络的输出只能取值0或1,不具备可导性。而基于敏感度的训练算法要求其输出函数必须处处可导,于是引入了常见的S型可导函数,即在每个神经元的输出之前先经过S型激活函数的处理。)

交叉熵

通俗一点就是,方差大家都知道吧,用它可以衡量预测值和实际值的相差程度,交叉熵其实也是一样的作用,那为什么不用方差呢,因为看sigmoid函数的图像就会发现,它的两侧几乎就是平的,导致它的方差在大部分情况下很小,这样在训练参数的时候收敛地就会很慢,交叉熵就是用来解决这个问题的,它的公式是 −∑y′log(y) ,其中,y是我们预测的概率分布,y’是实际的分布。

梯度下降

上面那步也说了,有个交叉熵,根据大伙对方差的理解,值越小,自然就越好,因此我们也要训练使得交叉熵最小的参数,这里梯度下降法就派上用场了,这个解释见上一篇系列文章吧,什么叫训练参数呢,可以想象一下,我们先用实际的值在二位坐标上画一条线,然后我们希望我们预测出来的那些值要尽可能地贴近这条线,我们假设生成我们这条线的公式ax+ax^2+bx^3+…..,我们需要生成这些系数,要求得这些系数,我们就需要各种点代入,然后才能求出,所以其实训练参数跟求参数是个类似的过程。

预测

训练结束以后我们就可以用这个模型去预测新的图片了,大概意思就是输入对应的值就能获取相应的结果。

代码如下:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import gzip
import os
import tempfile

import numpy
from six.moves import urllib
from six.moves import xrange  # pylint: disable=redefined-builtin
import tensorflow as tf
from tensorflow.contrib.learn.Python.learn.datasets.mnist import read_data_sets
import tensorflow.examples.tutorials.mnist.input_data
"""MNIST机器学习"""
"""下载并读取数据源"""
mnist = read_data_sets("MNIST_data/", one_hot=True)
"""x是784维占位符,基础图像28x28=784"""
x = tf.placeholder(tf.float32,[None,784])
"""W表示证据值向量,因为总数据量为0~9,每一维对应不同的数字,因此为10"""
W = tf.Variable(tf.zeros([784,10]))
"""b同理,为10"""
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W)+b)
"""初始化交叉熵的值"""
y_ = tf.placeholder("float",[None,10])
"""计算交叉熵"""
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
"""梯度下降算法"""
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
"""开始训练模型"""
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for i in range(1000):
    batch_xs,batch_ys = mnist.train.next_batch(100)
    sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})
"""评估模型"""
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
"""正确率"""
k = sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
print(k)

--结束END--

本文标题: MNIST机器学习入门

本文链接: https://www.lsjlt.com/news/192284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MNIST机器学习入门
    当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。 MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签...
    99+
    2023-01-31
    入门 机器 MNIST
  • Python机器学习入门(一)序章
    目录前言写在前面1.什么是机器学习?1.1 监督学习1.2无监督学习2.Python中的机器学习3.必须环境安装Anacodna安装总结前言 每一次变革都由技术驱动。纵观人类历史,上...
    99+
    2022-11-12
  • 如何开始入门机器学习
    这篇文章主要介绍“如何开始入门机器学习”,在日常操作中,相信很多人在如何开始入门机器学习问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何开始入门机器学习”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!为什...
    99+
    2023-06-27
  • 环境搭建-机器学习入门(一)
    机器学习不建议直接自行配置python环境,各种第三方库的版本相当难处理。所以需要安装Anaconda3直接搭建一个完整的机器学习环境 Linux环境配置(centos7.4) 执行下列命令安装Anaconda3 # 惯例升级yum y...
    99+
    2023-01-31
    入门 机器 环境
  • 【机器学习】Python 快速入门笔记
    Python 快速入门笔记Xu An   2018-3-7 1、Python print#在Python3.X中使用print()进行输出,而2.x中使用()会报错 print("hello world")  print('I\'m app...
    99+
    2023-01-31
    入门 机器 快速
  • 由浅入深学习TensorFlow MNIST 数据集
    目录MNIST 数据集介绍LeNet 模型介绍卷积池化 (下采样)激活函数 (ReLU)LeNet 逐层分析1. 第一个卷积层2. 第一个池化层3. 第二个卷积层4. 第二个池化层5...
    99+
    2022-11-12
  • 机器学习教程,Python3天快速入门机
    人工智能,现今已经是好多程序员都想学习的技能,毕竟人工智能这么火,对不对?你是否也想学习呢?今天就分享一个机器学习教程,Python3天快速入门机器学习! 该课程是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算...
    99+
    2023-01-31
    入门 机器 快速
  • python入门学习
    首先在官网下载好python3.6及以上的版本,根据自己的系统选择:没有显示64位的就是32位的安装包,选择蓝线的能够直接打开 在控制台输入python,配置成功的图片如下: 从IDLE打开python输入指令 print("I lo...
    99+
    2023-01-31
    入门 python
  • MySQL入门学习
    ...
    99+
    2015-02-25
    MySQL入门学习
  • Node.js学习入门
    开始之前,安利一本正在看的书《站在两个世界的边缘》,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间。OK,有兴趣的可以看一看。 node.js如标题一样,我也是刚开始接触,大家一起学习,有不当的地方...
    99+
    2022-06-04
    入门 Node js
  • web安全之机器学习入门——3.2 决策
    目录 简介 决策树简单用法 决策树检测P0P3爆破 决策树检测FTP爆破 随机森林检测FTP爆破   简介 决策树和随机森林算法是最常见的分类算法; 决策树,判断的逻辑很多时候和人的思维非常接近。 随机森林算法,利用多棵决策树对样本进行...
    99+
    2023-01-31
    入门 机器 web
  • Oracle入门学习三
    上一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=26 字符串函数:length、upper、lower、initcap、 concat、instr...
    99+
    2021-08-20
    Oracle入门学习三
  • Oracle入门学习五
    学习视频: https://www.bilibili.com/video/BV1tJ411r7ECp=35 数据的完整性:保证插入表格的数据必须正确。包括实体完整性、区域完整性、引用完整性、自定义完整性。 约束:约束的作用是为了保...
    99+
    2022-04-01
    Oracle入门学习五
  • Oracle入门学习六
    事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就自动开启了事务 提交事务:commit 回滚事务:rollback cr...
    99+
    2021-12-10
    Oracle入门学习六
  • Oracle入门学习一
    oracle的安装,用户授权,表格操作,数据类型,ddl表格,dml数据。 下一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 安装教程附带...
    99+
    2018-09-30
    Oracle入门学习一
  • Oracle入门学习二
    上一篇:Oracle入门学习一 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 算术运算符:+ - * / 逻辑运算符:and or not 比较运算符:“=”、“”、“=...
    99+
    2014-07-13
    Oracle入门学习二
  • Oracle入门学习四
    上一篇:Oracle入门学习三 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=35 Oracle表连接:内连接、外连接。外连接分左连接、右连接。 多表查询时,如果表之间没有条件...
    99+
    2017-05-24
    Oracle入门学习四
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。settings.py 默认已经绑定了sqlite3DA...
    99+
    2023-01-31
    入门 Django
  • Python入门学习(六)
    在熟悉了Python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧 def add(x, y): return x + y 函数 函数语法 def functonname(parameters): ... ...
    99+
    2023-01-31
    入门 Python
  • Python装饰器入门学习教程(九步学习)
    装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数...
    99+
    2022-06-04
    入门 教程 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作