当前位置: 首页 > 科技观察

Tensorflow.js中如何处理MNIST图像数据_0

时间:2023-03-16 17:47:30 科技观察

有人开玩笑说,80%的数据科学家都在清洗数据,剩下的20%都在抱怨清洗数据……在数据科学工作中,清洗的比例数据比外界高出很多,超乎想象。一般来说,训练模型通常只占机器学习或数据科学家工作的一小部分(不到10%)。——KaggleCEOAntonyGoldbloom对于任何机器学习问题,数据处理都是重要的一步。本文将使用Tensorflow.js(0.11.1)的MNIST示例(https://github.com/tensorflow/tfjs-examples/blob/master/mnist/data.js)逐行运行数据处理代码.undefinedloadasyncload(){//请求MNISTspritedimage.constimg=newImage();constcanvas=document.createElement('canvas');constctx=canvas.getContext('2d');异步函数(async)是Javascript中比较新的语言特性,所以你需要一个转译器。图像对象是在内存中表示图像的本机DOM函数,提供可以在图像加载时访问图像属性的回调。画布是DOM的另一个元素,它提供了一种访问像素数组并通过上下文处理它们的简单方法。由于它们都是DOM元素,因此如果使用Node.js(或WebWorker)则无需访问这些元素。请参阅下文了解其他替代方案。imgRequestconstimgRequest=newPromise((resolve,reject)=>{img.crossOrigin='';img.onload=()=>{imgimg.width=img.naturalWidth;imgimg.height=img.naturalHeight;这段代码初始化了一个新的promise,promise在图片加载成功时结束。这个例子没有明确处理错误状态。crossOrigin是一个允许图片跨域加载的图片,可以解决与DOM属性交互时的CORS(跨域资源共享)问题.naturalWidth和naturalHeight指的是加载图片的原始尺寸,计算时可以强制修正图片大小constdatasetBytesBuffer=newArrayBuffer(NUMDATASETELEMENTS*IMAGESIZE*4);5758constchunkSize=5000;59canvas.width=img.width;60canvas。height=chunkSize;这段代码初始化一个包含每幅图像的每个像素的新缓冲区,它将图像总数乘以每幅图像的大小和通道数。我认为chunkSize的目的是为了防止UI一次加载太多数据到内存中,但不能100%确定。62for(leti=0;iresp.arrayBuffer()).然后(缓冲区=>{returnnewPromise(resolve=>{constreader=newPNGReader(缓冲区));returnreader.parse((err,png)=>{constpixels=Float32Array.from(png.pixels).map(pixel=>{returnpixel/255;});this.datasetImages=pixels;resolve();});});});这将返回特定图像的缓冲数组。在写这篇文章时,我首先尝试解析传入缓冲区,但我不建议这样做。如果有必要,我建议使用pngjs进行png解析。在处理其他格式的图片时,需要自己编写解析函数。数据操作是JavaScript机器学习的重要组成部分。通过了解本文中描述的用例和要求,我们可以根据需要格式化数据,同时仅使用几个关键功能。TensorFlow.js团队一直在改进TensorFlow.js的底层数据API,这有助于满足更多需求。这也意味着随着TensorFlow.js不断改进和发展,API将继续向前发展并保持同步。原文链接:https://medium.freecodecamp.org/how-to-deal-with-mnist-image-data-in-tensorflow-js-169a2d6941dd【本文为专栏组织《机器之心》原创文章》、微信公众号《机器之心(id:almosthuman2014)》】点此阅读作者更多好文