您好、欢迎来到现金彩票网!
当前位置:刘伯温论坛 > 图像函数 >

教程 如何在Tensorflowjs中处理MNIST图像数据

发布时间:2019-06-12 04:33 来源:未知 编辑:admin

  数据清理是数据科学和机器学习中的重要组成部分,本文介绍了如何在 Tensorflow.js(0.11.1)中处理 MNIST 图像数据,并逐行解释代码。

  有人开玩笑说有 80% 的数据科学家在清理数据,剩下的 20% 在抱怨清理数据……在数据科学工作中,清理数据所占比例比外人想象的要多得多。一般而言,训练模型通常只占机器学习或数据科学家工作的一小部分(少于 10%)。

  对任何一个机器学习问题而言,数据处理都是很重要的一步。本文将采用 Tensorflow.js(0.11.1)的 MNIST 样例(),逐行运行数据处理的代码。

  首先,导入 TensorFlow(确保你在转译代码)并建立一些常量,包括:

  异步函数(async)是 Java 中相对较新的语言功能,因此你需要一个转译器。

  Image 对象是表示内存中图像的本地 DOM 函数,在图像加载时提供可访问图像属性的回调。canvas 是 DOM 的另一个元素,该元素可以提供访问像素数组的简单方式,还可以通过上下文对其进行处理。

  因为这两个都是 DOM 元素,所以如果用 Node.js(或 Web Worker)则无需访问这些元素。有关其他可替代的方法,请参见下文。

  该代码初始化了一个 new promise,图像加载成功后该 promise 结束。该示例没有明确处理误差状态。

  该代码初始化了一个新的 buffer,包含每一张图的每一个像素。它将图像总数和每张图像的尺寸和通道数量相乘。

  我认为 chunkSize 的用处在于防止 UI 一次将太多数据加载到内存中,但并不能 100% 确定。

  该代码遍历了每一张 sprite 图像,并为该迭代初始化了一个新的 TypedArray。接下来,上下文图像获取了一个绘制出来的图像块。最终,使用上下文的 getImageData 函数将绘制出来的图像转换为图像数据,返回的是一个表示底层像素数据的对象。

  我们遍历了这些像素并除以 255(像素的可能最大值),以将值限制在 0 到 1 之间。只有红色的通道是必要的,因为它是灰度图像。

  这一行创建了 buffer,将其映射到保存了我们像素数据的新 TypedArray 中,然后结束了该 promise。事实上最后一行(设置 src属性)才真正启动函数并加载图像。

  起初困扰我的一件事是 TypedArray 的行为与其底层数据 buffer 相关。你可能注意到了,在循环中设置了 datasetBytesView,但它永远都不会返回。

  如果你在 DOM 中,使用 DOM 即可,浏览器(通过 canvas)负责确定图像的格式以及将缓冲区数据转换为像素。但是如果你在 DOM 外工作的话(也就是说用的是 Node.js 或 Web Worker),那就需要一种替代方法。

  fetch 提供了一种称为 response.arrayBuffer 的机制,这种机制使你可以访问文件的底层缓冲。我们可以用这种方法在完全避免 DOM 的情况下手动读取字节。这里有一种编写上述代码的替代方法(这种方法需要 fetch,可以用 isomorphic-fetch 等方法在 Node 中进行多边填充):

  这为特定图像返回了一个缓冲数组。在写这篇文章时,我第一次试着解析传入的缓冲,但我不建议这样做。如果需要的话,我推荐使用 pngjs 进行 png 的解析。当处理其他格式的图像时,则需要自己写解析函数。

  理解数据操作是用 Java 进行机器学习的重要部分。通过理解本文所述用例与需求,我们可以根据需求在仅使用几个关键函数的情况下对数据进行格式化。

  TensorFlow.js 团队一直在改进 TensorFlow.js 的底层数据 API,这有助于更多地满足需求。这也意味着,随着 TensorFlow.js 的不断改进和发展,API 也会继续前进,跟上发展的步伐。

http://airgomusic.com/tuxianghanshu/265.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有