我试图从这个源:http://yann.lecun.com/exdb/mnist/解码数据集
下面有一个关于“非常简单”的IDX文件类型的描述,但是我无法理解它。
我想要达到的目标是:
var imagesFileBuffer = fs.readFileSync(__dirname + '/train-images-idx3-ubyte');
var labelFileBuffer = fs.readFileSync(__dirname + '/train-labels-idx1-ubyte');
var pixelValues = {};
施魔法
pixelValues现在就像:
// {
// "0": [0,0,200,190,79,0... for all 784 pixels ... ],
// "4": [0,0,200,190,79,0... for all 784 pixels ... ],
用于数据集中的所有图像条目。我试图找出二进制文件的结构,但失败了。
发布于 2016-03-03 14:45:51
只是一个小小的改进:
for (var image = 0; image <= 59999; image++) {
对于60000,在pixelValues
的末尾有一个带有null的“条目”。
编辑:
我有点痴迷于细节,因为我想将MNIST数据集转换回真实的和单独的图像文件。所以我在你的代码中发现了更多的错误。
所以你的代码应该是:
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训练好的神经网络用真实的手写体数字来验证,你就会得到不好的结果,因为真实的图像不会被翻转。
https://stackoverflow.com/questions/25024179
复制相似问题