使用mllib完成mnist手写识别任务

  1. 小提示,通过restart命令重启已经退出了的容器

    sudo docker restart <contain id>

  2. 完成识别任务准备工作

    1. 从以下网站下载数据集:

      MNIST手写数字数据库,Yann LeCun,Corinna Cortes和Chris Burges

      数据集包含以下四个压缩包,下载后解压得到数据集文件:

      • t10k-images-idx3-ubyte.gz
      • t10k-labels-idx1-ubyte.gz
      • train-images-idx3-ubyte.gz
      • train-labels-idx1-ubyte.gz
    2. 通过以下python程序,将数据集文件转换为csv文件

      def convert(imgf, labelf, outf, n):f = open(imgf, "rb")o = open(outf, "w")l = open(labelf, "rb")f.read(16)l.read(8)images = []for i in range(n):image = [ord(l.read(1))]for j in range(28 * 28):image.append(ord(f.read(1)))images.append(image)for image in images:o.write(",".join(str(pix) for pix in image) + "\n")f.close()o.close()l.close()# 数据集在 http://yann.lecun.com/exdb/mnist/ 下载
      convert("train-images.idx3-ubyte", "train-labels.idx1-ubyte","mnist_train.csv", 60000)
      convert("t10k-images.idx3-ubyte", "t10k-labels.idx1-ubyte","mnist_test.csv", 10000)
      

      通过这个程序将在根目录下产生以下两个文件:

      • mnist_train.csv
      • mnist_test.csv
    3. 通过以下python程序转换csv文件为libsvm文件

      import csvdef execute(data, savepath):csv_reader = csv.reader(open(data))f = open(savepath, 'wb')for line in csv_reader:label = line[0]features = line[1:]libsvm_line = label + ' 'for index, feature in enumerate(features):libsvm_line += str(index + 1) + ':' + feature + ' 'f.write(bytes(libsvm_line.strip() + '\n', 'UTF-8'))f.close()execute('mnist_train.csv', 'mnist_train.libsvm')
      execute('mnist_test.csv', 'mnist_test.libsvm')
      

      该程序将生成以下两个.libsvm文件:

      • mnist_test.libsvm
      • mnist_train.libsvm
    4. 通过共享目录传递数据集到spark-master容器内。

    5. 进入spark-master

      sudo docker exec -it spark-master /bin/bash

    6. 打开spark-shell

      spark-shell位于/spark/bin目录下

      使用./spark-shell命令进入spark-shell。

  3. 完成识别任务

    1. 读取训练集

      val train = spark.read.format("libsvm").load("/data/mnist_train.libsvm")
      

    2. 读取测试集

      val test =       spark.read.format("libsvm").load("/data/mnist_test.libsvm")
      

    3. 定义网络结构。如果计算机性能不好可以降低隐藏层的参数。

      val layers = Array[Int](784, 784, 784, 10)
      

    4. 导入多层感知机与多分类评价器。

      import org.apache.spark.ml.classification.MultilayerPerceptronClassifier
      import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
      

    5. 使用多层感知机初始化训练器。

      val trainer = new MultilayerPerceptronClassifier().setLayers(layers).setBlockSize(128).setSeed(1234L).setMaxIter(100)
      

    6. 训练模型

      var model = trainer.fit(train)
      

    7. 输入测试集进行识别

      val result = model.transform(test)
      

    8. 获取测试结果中的预测结果与实际结果

      val predictionAndLabels = result.select("prediction", "label")
      

    9. 初始化评价器

      val evaluator = new MulticlassClassificationEvaluator().setMetricName("accuracy")
      

    10. 计算识别精度

      println(s"Test set accuracy = ${evaluator.evaluate(predictionAndLabels)}")
      

    11. 在result上创建临时视图

      result.toDF.createOrReplaceTempView("deep_learning")
      

    12. 使用Spark SQL的方式计算识别精度

      spark.sql("select (select count(*) from deep_learning where label=prediction)/count(*) as accuracy from deep_learning").show()
      

使用mllib完成mnist手写识别任务相关推荐

  1. Tensorflow之基于MNIST手写识别的入门介绍

    Tensorflow是当下AI热潮下,最为受欢迎的开源框架.无论是从Github上的fork数量还是star数量,还是从支持的语音,开发资料,社区活跃度等多方面,他当之为superstar. 在前面介 ...

  2. Mnist手写识别项目常见问题及解决方法

    环境搭建 问题1:在Visual Studio 2019中的"扩展"管理中搜索不到"AI工具" 解决方法:因为"AI工具"插件不支持Visu ...

  3. 深度学习笔记(MNIST手写识别)

    先看了点花书,后来觉得有点枯燥去看了b站up主六二大人的pytorch深度学习实践的课,对深度学习的理解更深刻一点,顺便做点笔记,记录一些我认为重要的东西,便于以后查阅. 一. 机器学习基础 学习的定 ...

  4. 【TensorFlow】TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别

    本文是<TensorFlow从浅入深>系列之第3篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  5. Tensorflow实现MNIST手写识别

    MNIST手写体识别训练和测试模型下载地址: MNIST手写体模型下载 MNIST手写体识别,标签编码为独热(one-hot)编码 One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对 ...

  6. Tensorflow MNIST 手写识别

    这是一个系列,记录我Tensorflow开发常用的代码,小常识,有些是参考网上代码,(讲的可能有点烂,求不要打脸,嘤嘤嘤~~)送给那些需要的人.可以相互交流,喜欢的加我吧. Wx: Lxp911221 ...

  7. TensorFlow | 使用Tensorflow带你实现MNIST手写字体识别

    github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 涉及代码:https://github.c ...

  8. python简单代码演示效果-10分钟教你用python 30行代码搞定简单手写识别!

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...

  9. Tensorflow快餐教程(1) - 30行代码搞定手写识别

    摘要: Tensorflow入门教程1 去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的 ...

最新文章

  1. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
  2. Maya游戏角色绑定入门学习教程 Game Character Rigging for Beginners in Maya
  3. nginx负载均衡和lvs负载均衡的比较分析
  4. python关联规则挖掘_Python3:文本关联规则挖掘实现案例分析
  5. 图文并茂详解iptables 防火墙工作原理及知识点
  6. 中国硫酸氧钒市场发展战略与投资可行性分析报告2022-2028年版
  7. 计算广告 读书笔记 计算广告的核心问题
  8. 干不掉的钉钉:从哪来,往哪去?
  9. 微软+开源,那些亲爱的以及热爱的
  10. 如何在Java中验证电话号码(正则表达式+ Google libphonenumber)
  11. 前端学习(874):解绑事件兼容方案
  12. 一块GPU模拟猴子大脑,普通台式机变超算,英国大学研究登上Nature子刊
  13. linux 网络定时断链,客户端连接linux经常间隔性断开链接
  14. 怎么选一个合适的手机?需要大内存,价格不太高的?
  15. Linux异常 时间戳 2018-10-08 11:17:22 是未来的 5288025.776562967 秒之后
  16. 《Windows游戏编程大师技巧》中关于DirectDraw和创建DirectDraw知识笔记
  17. windows NET命令的使用
  18. android前置摄像头预览,Android - 前置摄像头预览SurfaceView
  19. 应用html的DIV+CSS制作牛顿摆
  20. webworker应用场景_多线程编程开发应用场景

热门文章

  1. 00后步入社会,有哪些适合你的创业项目?
  2. 长期持有银行股,吃分红,打新股是什么体验?
  3. echarts 自定义平均线值
  4. 软件工程头歌对现有系统进行分析
  5. 软件构造学习笔记ATD
  6. Qimage颜色显示反色总结
  7. 中职计算机专业的就业问题,中职计算机专业面临的就业形势与对策浅析
  8. 决策树算法原理以及决策树规则生成方法
  9. 35岁后最可怕的事,就是成为职场中的奢侈品
  10. C++常用的延时方法