当前位置: 首页 > 编程日记 > 正文

在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在了解了TensorflowJS的一些基本模型的后,大家会问,这究竟有什么用呢?我们就用深度学习中被广泛使用的MINST数据集来进行一下手写识别的操作。

MINST数据集

MINST是一组0到9的手写数字。就像这个:

Image result for MNISTæ°æ®é

这组数据出现在各种深度学习的入门和例子中,有点像传统机器学习中的Iris数据集。被各种使用。

TensorflowJS提供了一个关于训练MINST数据集的例子。

085004_dnDh_1450051.png

为了便于重用,笔者把其中提供数据的代码提取出来。大家可以参考。该部分主要功能有:

  • class MnistData()提供数据类
  • load()对Minst数据的异步加载
  • nextTrainBatch(batchSize)从训练数据集中随机返回batchSize的数据,虽然MINST数据集是有限的,但是调用nextBatch总是能返回数据。
  • nextTestBatch(batchSize)从测试数据集中随机返回batchSize的数据
  let data;async function load() {data = new MnistData();await data.load();}async function mnist() {await load();console.log("Data loaded!");}mnist().then(function(){const train_data = data.nextTrainBatch(batch_size);// 使用train_data数据}); 

返回的train_data的格式如下:

  • train_data.xs 是shape为[16, 784]的张量,16是数据的个数,784 = 28*28,是二维图像打平后的数据。
  • train_data.labels是shape为[16, 10]的张量,16是数据的个数,每一个数据标签是一个有是个数值的向量。分别对应0-9

请参考的我的代码演示:

090534_3pSP_1450051.png

逻辑回归

在我的前一篇文章《在浏览器中进行深度学习:TensorFlow.js (三)更多的基本模型》中,我们使用逻辑回归演示了对空间二维数据点的分类算法。这一次我就拿MINST数据集来试一试。

训练算法代码如下:

function logistic_regression(train_data) {const batch_size = 1000;const numIterations = 1000;const number_of_labels = 10;let loss_results = [];const learningRate = 0.15;const optimizer = tf.train.sgd(learningRate);const w = tf.variable(tf.zeros([784,number_of_labels]));const b = tf.variable(tf.zeros([number_of_labels]));function predict(x) {return tf.softmax(tf.add(tf.matMul(x, w),b));}function loss(predictions, labels) {const entropy = tf.mean(tf.sub(tf.scalar(1),tf.sum(tf.mul(labels, tf.log(predictions)),1)));return entropy;}for (let iter = 0; iter < numIterations; iter++) {const batch = train_data.nextTrainBatch(batch_size);const train_x = batch.xs;const train_y = batch.labels;optimizer.minimize(() => {const loss_var = loss(predict(train_x), train_y);loss_results.push({x:new Date().getTime(), y:loss_var.dataSync()[0]});return loss_var;}) train_x.dispose();train_y.dispose();}return { model : predict,loss : loss_results};
}

大家可以比较一下和之前的例子的区别,可以发现几个小的差异:

  • 之前的例子数据和数据的标签是分开的,这里数据和标签在train_data的xs和labels属性中。
  • 逻辑回归的连个变量w和b的shape不一样,因为这些变量要和问题域的数据形状保持一致。
  • loss_result用于训练完成后返回训练过程中损失的变化。
  • 调用dispose方法释放资源。

请参考的我的代码演示:

091926_C4k5_1450051.png

BatchSize=16,迭代100次,准确率为0.9。白底黑字的是预测错误的数据。

这个是验证准确率的代码:

const test_batch = data.nextTestBatch(100);
const prediction = train_result.model(test_batch.xs);
const correct_prediction = tf.equal(tf.argMax(prediction,1), tf.argMax(test_batch.labels, 1));
const accuracy = tf.mean(tf.cast(correct_prediction,'float32'));

过程入下:

  1. 从测试数据中取100个点
  2. 对这100点做预测
  3. 计算有哪些点是预测正确的。tf.argMax(prediction,1) 返回预测结果在维度1上最大值所在的索引。因为对于标签而言,[1,0,0,0,0,0,0,0,0,0]表示0,[0,1,0,0,0,0,0,0,0,0]表示1,所以最大值的索引,其实就是1的位置,也就是预测的结果。tf.equal检查连个张量是不是相等。
  4. 计算正确预测的数据的均值,也就是准确率。

092017_0emK_1450051.png

增大迭代次数,准确率并没有提高。

092152_lArX_1450051.png

增大BatchSize对结果也没有改善。

测试下来,逻辑回归的算法应用在MINST数据集上准确率在90%左右。

近邻算法

同样的我们也试一下近邻算法在MINST数据上的分类效果。

function nearest_neighbers(train_data) {const train_xs = train_data.xs;const train_labels = train_data.labels;let results;return function(x) {for (let i = 0; i < x.shape[0]; i++) {const xs = x.slice([i, 0], [1, x.shape[1]]);const distance = tf.sum(tf.abs(tf.sub(xs, train_xs)),1);const label_index = tf.argMin(distance, 0);if (results ) {results = results.concat(train_labels.gather(label_index.expandDims(0)));} else {results = train_labels.gather(label_index.expandDims(0));}}return results;};
}

该算法采用L1距离来预测,简单的说就是计算目标张量离训练数据哪一个近,就分为那个类。

这里:

  • 对每一输入数据,计算和训练数据各个点的距离,找到最近的点,可以理解为找到长得最像的图像。
  • 所有的输入点都计算完后,利用tf.concat方法把结果合并在一个张量中返回。

094055_96JQ_1450051.png

094137_g4oD_1450051.png

094216_dJPN_1450051.png

我们发现,因为不存在迭代,分类的准确率和训练数据的规模关系明显:

  • 100 > 0.71
  • 1000 > 0.88
  • 5000 > 0.92

还有如果你选择训练集size为1你会发现:

094500_FPFD_1450051.png

如上图所示,只有数字3能被准确分类。我可以肯定,那个训练数据就是3 。

好了,至今,这个系列已经是第四篇了,说好的深度学习呢?作者该不是个骗子吧?请大家稍安勿躁,我保证后面一定有深度学习的内容。

094925_R4r5_1450051.jpeg

参考

  • 在浏览器中进行深度学习:TensorFlow.js (三)更多的基本模型
  • 在浏览器中进行深度学习:TensorFlow.js (二)第一个模型,线性回归
  • 在浏览器中进行深度学习:TensorFlow.js (一)基本概念

转载于:https://my.oschina.net/taogang/blog/1803051

相关文章:

不止临床应用,AI还要帮不懂编程的医生搞科研

近日&#xff0c;推想科技发布 AI 学者科研平台 InferScholar Center&#xff0c;该平台为更多的医生提供零门槛的 AI 科研能力&#xff0c;让医生可以快速将深度学习、影像组学以及文本数据处理相关的前沿技术应用到自己的临床科研实践中&#xff0c;他们将为平台上的医疗科研…

rhel6Inode详解

在Linux文件系统中&#xff0c;很多人对Inode都不太明白&#xff0c;今天我就和大家一起来分享一下我对Inode的认识&#xff0c;如果有理解错误的地方&#xff0c;请大家多多批评指点。在上一篇一天一点学习Linux之认识文件系统中&#xff0c;在最后给出了一张EXT3文件系统结构…

争论不休的TF 2.0与PyTorch,到底现在战局如何了? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑作者 | Jeff Hale译者 | Jackey编辑 | Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导语】 TensorFlow 2.0 和 PyTorch 1.0 陆续发布后&#xff0c;…

struts2实验2:struts2.xml action中* ,{}以及${}

p.s 关键在于struts.xml中的匹配&#xff0c;使用* ,{}以及${}可以让代码更加简洁清晰 代码核心思路 在struts.xml中通过路由(url)去指定控制逻辑的Action中的方法,例如 <package name"admin" namespace"/admin" extends"struts-global">&…

【Ubuntu】dpkg-deb -c :查看deb文件中的内容

1、dpkg-deb -c :查看deb文件中的内容 $ dpkg-deb -c packageeg&#xff1a; $ dpkg-deb -c sogoupinyin_2.2.0.0108_amd64.deb drwxr-xr-x root/root 0 2018-04-18 16:50 ./ drwxr-xr-x root/root 0 2018-04-18 16:50 ./etc/ drwxr-xr-x root/root …

捕获Camera并保存图片到本地(照相功能) -samhy

Flex博文 捕获Camera并保存图片到本地(照相功能) -samhy作者:admin 日期:2010-07-12字体大小: 小 中 大捕获Camera并保存图片到本地(照相功能)这几天对Camera类进行了一下规整&#xff0c;并利用JPGEncoder类实现了照相的功能,代码如下&#xff1a; XML/HTML代码import flash.m…

【C++】模板函数的声明和定义必须在同一个文件中

1、问题描述 习惯性的将函数的定义和实现&#xff0c;分别写在头文件和源文件&#xff08;.cpp&#xff09;中。今天也按照这个习惯实现了一个模板函数。然后编译时报错 ... error: undefined reference to ...2、原因分析 c中模板的声明和定义不能分开。C中每一个对象所占用…

基于AWS-ELK部署系统日志告警系统

前言 运维故障排障速度往往与监控系统体系颗粒度成正比&#xff0c;监控到位才能快速排障 在部署这套系统之前&#xff0c;平台所有系统日志都由GraylogZabbix&#xff0c;针对日志出现的错误关键字进行告警&#xff0c;这种做法在运维工作开展过程中暴露出多个不足点&#xff…

《周志华机器学习详细公式推导版》发布,Datawhale开源项目pumpkin-book

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑来源 | Datawhale&#xff08;ID&#xff1a;Datawhale&#xff09; 如果让你推荐两本国内机器学习的入门经典作&#xff0c;你会推荐哪些呢&#xff1f;相信大家同我一样&#xff…

JVM内存泄漏检测与处理

JVM内存泄漏检测与处理&#xff08;JVM Memory Leak detection and handling&#xff09; JVM垃圾回收机制的原则和方法 JVM垃圾回收中一个基本原则是对象没有被引用或则引用其它对象&#xff0c;换句话说当一个对象在heap 中是隔离(isolation)状态的时候&#xff0c;垃圾回收器…

【Dlib】dlib和opencv的互转

一、dlib::matrix转换成cv::Mat 1、注意事项&#xff1a; 1&#xff09;将dlib::matrix转成BGR格式后&#xff0c;再转换成cv::Mat&#xff0c;因为cv::Mat中是按照BGR顺序存储 2&#xff09;注意最后添加的cv::Mat::clone()函数&#xff0c;因为dlib::toMat(tmp)返回的mat数…

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 02972018-04-29 16:15:27 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 齐鲁晚报 2018年04月29日 2018年4月29日&#xff0c;山东省临沂市临沭县&#xff0c;一位年轻的小伙子。吴忠军&#xff0c;山东…

百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑整理 | 一一出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;2016 年 7 月&#xff0c;锤子科技前 CTO 钱晨从该公司退休的消息被证实&#xff0c;关于其离职的…

【Dlib】dlib实现深度网络学习之 input层

1、 dlib::input 模板类&#xff0c;深度神经网络的简单输入层&#xff0c;它将某种图像作为输入并将其加载到网络中。 这是一个基本的输入层&#xff0c;它只是简单地将图像复制到一个张量中。 注意&#xff1a;dlib::input只支持输入dlib::matrix和dlib::array2d类型&#x…

首发 | 13篇京东CVPR 2019论文!你值得一读~ 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑编者按&#xff1a;计算机视觉和模式识别大会 CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;作为人工智能领域计算机视觉方向的重要学术会议…

Windows 活动目录(AD)服务器系统升级到2012之活动目录角色迁移(三)

4.5迁移服务器角色到AD20121. 打开powershell&#xff0c;使用命令迁移服务器角色到AD2008输入命令Ntdsutil输入命令Roles输入命令Connections输入命令Connect to server AD2012&#xff0c;连接AD2012控制器输入命令QUIT输入Transfer infrastructure master命令&#xff0c;转…

《星际争霸2》引擎技术解析

就在SIGGRAPH大会刚结束之后&#xff0c;AMD和暴雪在AMD官方网站上放出了《星际争霸II》的官方技术文档&#xff0c;通过游戏引擎技术的展示让星际迷们感受到越来越多的惊喜。画面优化给CPU带来考验着色方面&#xff0c;在使用原型的基础上利用3D Studio MAX让程序员对整体效果…

回顾与展望:大热的AutoML究竟是什么? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑来源 | 第四范式编者按&#xff1a;AutoML&#xff08;Automatic Machine Learning&#xff0c;自动机器学习&#xff09;旨在研究在没有专业知识的情况下使用的低门槛甚至零门槛的…

【Python】深度学习中将数据按比例随机分成随机 训练集 和 测试集的python脚本

深度学习中经常将数据分成 训练集 和 测试集&#xff0c;参考博客&#xff0c;修改python脚本 randPickAITrainTestData.py 。 功能&#xff1a;从 输入目录 中随机检出一定比例的文件或目录&#xff0c;移动到保存 测试集目录 中&#xff0c;原输入目录作为训练目录。 import…

docker 系列之 配置阿里云镜像加速器

1.登录阿里云 2.登录后找到右上角的“管理中心”,点击进入后》点击“镜像加速器”;剩下的安装文档配置就好 问题1&#xff1a;配置完后还是提示&#xff1a;Tag latest not found in repository 【本人也是在这里被困了好久,尝试了各种方法】 解决方案&#xff1a;最后发现这里…

LVM-HOWTO/学习笔记(二)

1. 在3块scsi磁盘上创建lv Run pvcreate on the disks # pvcreate /dev/sda # pvcreate /dev/sdb # pvcreate /dev/sdc Create a volume group # vgcreate my_volume_group /dev/sda /dev/sdb /dev/sdc/ Run vgdisplay to verify volume group # vgdisplay # vgdisplay…

【python】使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来

使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来 dataCleaning4multiple.py 源码如下&#xff1a; import os, random, shutil import sys, getopt import stringdef getDir(argv):inPath outPath num2try:opts, args getopt.getopt(argv,"hi:o:n:",[&…

EXP6 信息搜集与漏洞扫描

1.实验有关问题 &#xff08;1&#xff09;哪些组织负责DNS&#xff0c;IP的管理。 ICANN是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际组织&#xff0c;负责在全球范围内对互联网唯一标识符系统及其安全稳定的运营进行协调&#xff0c;它能决定域名和IP地址…

百度发的208亿春晚红包,靠这样的技术送到了你手上 | 解读

2019 年的春晚红包项目对百度而言是一次大考&#xff0c;背后需要强大的技术来支撑。如你所见&#xff0c;百度不负“技术大厂”的标签&#xff0c;春晚红包期间系统稳定运行&#xff0c;没有出现宕机事故。在这样一个庞大而复杂的项目面前&#xff0c;他们是如何去用技术去化解…

一步一步学Silverlight 2系列(10):使用用户控件

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Siyuan Qiao、Huiyu Wang、Chenxi Liu、Wei Shen、Alan Yuille&#xff08;Johns Hopkins University&#xff0c;约翰霍普金斯大学&#xff09;译者 | 刘畅编辑 | Jane出品 | AI科…

【AI】CelebA数据介绍、下载及说明

1、简介 CeleA是香港中文大学的开放数据&#xff0c;包含10177个名人的202599张图片 官网&#xff1a;http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 下载地址&#xff08;百度网盘&#xff0c;官方的&#xff09;&#xff1a;http://pan.baidu.com/s/1eSNpdRG 【python】…

Zend Framework Mail通过网易免费邮箱发送邮件

2019独角兽企业重金招聘Python工程师标准>>> 做为一个苦逼的个人站长&#xff0c;做一个小网站&#xff0c;本来愿意来看的人就不多&#xff0c;再弄一个不能找回密码的会员系统&#xff1f;基本上被判死刑了 。阿里云的短信也要钱啊&#xff0c;而且只支持PHP 5.5以…

将shp导入SDE中出现“表或视图不存在”问题

其原因是权限不够&#xff0c;下边代码可以用来检查权限是否够。 private void ESRILicense() { IAoInitialize mAoInitialize new AoInitializeClass(); esriLicenseStatus licenseStatus (esriLicenseStatus)mAoInitialize.IsProductCodeAvai…

【python】使用python脚本将CelebA中同一人的图片捡到对应单独的文件夹中

1、目的 CelebA的所有的照片都在一个文件夹中&#xff0c;为了能在dlib训练人脸识别时&#xff0c;方便使用&#xff0c;将CelebA中同一人的图片捡到对应单独的文件夹中。 【AI】CelebA数据介绍、下载及说明 2、方法 首先创建10178个目录&#xff0c;然后解析Anno/identity_…