有人开玩笑说,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;i
