首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用javascript/node.js读取MNIST数据集

用javascript/node.js读取MNIST数据集
EN

Stack Overflow用户
提问于 2014-07-29 20:16:22
回答 3查看 2.6K关注 0票数 4

我试图从这个源:http://yann.lecun.com/exdb/mnist/解码数据集

下面有一个关于“非常简单”的IDX文件类型的描述,但是我无法理解它。

我想要达到的目标是:

代码语言:javascript
运行
复制
var imagesFileBuffer = fs.readFileSync(__dirname + '/train-images-idx3-ubyte');
var labelFileBuffer  = fs.readFileSync(__dirname + '/train-labels-idx1-ubyte');
var pixelValues      = {};

施魔法

pixelValues现在就像:

代码语言:javascript
运行
复制
// {
//   "0": [0,0,200,190,79,0... for all 784 pixels ... ],
//   "4": [0,0,200,190,79,0... for all 784 pixels ... ],

用于数据集中的所有图像条目。我试图找出二进制文件的结构,但失败了。

EN

Stack Overflow用户

发布于 2016-03-03 14:45:51

只是一个小小的改进:

代码语言:javascript
运行
复制
for (var image = 0; image <= 59999; image++) {

对于60000,在pixelValues的末尾有一个带有null的“条目”。

编辑:

我有点痴迷于细节,因为我想将MNIST数据集转换回真实的和单独的图像文件。所以我在你的代码中发现了更多的错误。

  1. 它肯定是+16,因为您必须跳过头数据的16字节。这个小错误反映在你的答案中,第一个数字的第一个像素值(带一个5)是'28‘。它实际上是指示图像有多少列的值,而不是图像的第一个像素。
  2. 嵌套的for循环必须内部切换,以获得正确的像素顺序--同时,您将从左上角到右下角“重建”图像。使用您的代码,图像将沿着从左上角到右下角的轴翻转。

所以你的代码应该是:

代码语言:javascript
运行
复制
var dataFileBuffer  = fs.readFileSync(__dirname + '/train-images-idx3-ubyte');
var labelFileBuffer = fs.readFileSync(__dirname + '/train-labels-idx1-ubyte');
var pixelValues     = [];

// It would be nice with a checker instead of a hard coded 60000 limit here
for (var image = 0; image <= 59999; image++) { 
    var pixels = [];

    for (var y = 0; y <= 27; y++) {
        for (var x = 0; x <= 27; x++) {
            pixels.push(dataFileBuffer[(image * 28 * 28) + (x + (y * 28)) + 16]);
        }
    }

    var imageData  = {};
    imageData[JSON.stringify(labelFileBuffer[image + 8])] = pixels;

    pixelValues.push(imageData);
}

如果您保持一致性并将这些提取的数据用于-for示例训练神经网络,那么这些小细节就不会成为问题,因为您将对测试数据集做同样的处理。但是如果你想把MNIST训练好的神经网络用真实的手写体数字来验证,你就会得到不好的结果,因为真实的图像不会被翻转。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25024179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档