Lil*_*man 4 javascript neural-network node.js mnist
我正在尝试从此源解码数据集: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 = {};
Run Code Online (Sandbox Code Playgroud)
做魔法
pixelValues现在像:
// {
// "0": [0,0,200,190,79,0... for all 784 pixels ... ],
// "4": [0,0,200,190,79,0... for all 784 pixels ... ],
Run Code Online (Sandbox Code Playgroud)
等数据集中的所有图像条目.我试图找出二进制文件的结构,但失败了.
我意识到在pixelValues对象的结构中会有重复的键,所以我创建了一个对象数组.以下代码将创建我之后的结构:
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 x = 0; x <= 27; x++) {
for (var y = 0; y <= 27; y++) {
pixels.push(dataFileBuffer[(image * 28 * 28) + (x + (y * 28)) + 15]);
}
}
var imageData = {};
imageData[JSON.stringify(labelFileBuffer[image + 8])] = pixels;
pixelValues.push(imageData);
}
Run Code Online (Sandbox Code Playgroud)
pixelValues的结构现在是这样的:
[
{5: [28,0,0,0,0,0,0,0,0,0...]},
{0: [0,0,0,0,0,0,0,0,0,0...]},
...
]
Run Code Online (Sandbox Code Playgroud)
有28x28 = 784个像素值,均在0到255之间变化.
要渲染像素,像我上面那样使用for for循环,渲染左上角的第一个像素,然后向右移动.
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |