如何读取R中的MNIST数据库?

Str*_*keR 11 database file-io r

我目前正在研究一个案例研究,我需要在MNIST数据库上工作.
站点中的文件称为IDX文件格式.我尝试使用基本的文本编辑器(如记事本和wordpad)来查看这些文件,但没有运气.
期待它们将采用高端格式,我尝试了以下方法:

to.read = file("t10k-images.idx3-ubyte", "rb")
readBin(to.read, integer(), n=100, endian = "high")
Run Code Online (Sandbox Code Playgroud)

我得到了一些数字作为输出,但没有一个对我有任何意义.

任何人都可以解释如何读取R中的MNIST数据库文件以及如何解释这些数字?谢谢.

Spa*_*man 20

endian="big",不是"high":

> to.read = file("~/Downloads/t10k-images-idx3-ubyte", "rb")
Run Code Online (Sandbox Code Playgroud)

幻数:

> readBin(to.read, integer(), n=1, endian="big")
[1] 2051
Run Code Online (Sandbox Code Playgroud)

图像数量:

> readBin(to.read, integer(), n=1, endian="big")
[1] 10000
Run Code Online (Sandbox Code Playgroud)

行数:

> readBin(to.read, integer(), n=1, endian="big")
[1] 28
Run Code Online (Sandbox Code Playgroud)

列数:

> readBin(to.read, integer(), n=1, endian="big")
[1] 28
Run Code Online (Sandbox Code Playgroud)

这里有数据:

> readBin(to.read, integer(), n=1, endian="big")
[1] 0
> readBin(to.read, integer(), n=1, endian="big")
[1] 0
Run Code Online (Sandbox Code Playgroud)

根据网站上的训练集图像数据描述.

现在你只需要将28*28字节块循环并读入矩阵.

重新开始:

 > to.read = file("~/Downloads/t10k-images-idx3-ubyte", "rb")
Run Code Online (Sandbox Code Playgroud)

跳过标题:

> readBin(to.read, integer(), n=4, endian="big")
[1]  2051 10000    28    28
Run Code Online (Sandbox Code Playgroud)

应该真正从标题读取28,28但硬编码在这里:

 > m = matrix(readBin(to.read,integer(), size=1, n=28*28, endian="big"),28,28)
 > image(m)
Run Code Online (Sandbox Code Playgroud)

可能需要移调或翻转矩阵,我认为它是一个颠倒的"7".

par(mfrow=c(5,5))
par(mar=c(0,0,0,0))
for(i in 1:25){m = matrix(readBin(to.read,integer(), size=1, n=28*28, endian="big"),28,28);image(m[,28:1])}
Run Code Online (Sandbox Code Playgroud)

得到你:

在此输入图像描述

哦,谷歌引导我:http://www.inside-r.org/packages/cran/darch/docs/readMNIST这可能有用.

  • @Spacedman - 我尝试使用你提到的代码但是在我的绘图窗口中显示的图像没有任何意义,它们都混乱了.即使你在评论中提到的神奇数字和所有其他值对我来说也是非常不同的.例如,readreadBin(to.read,integer(),n = 4,endian ="big")[1] 1195909779 -2010897709 -580149833 -809942066这应该发生吗? (2认同)

小智 6

包中还提供了 MNIST 数据集keras

library(keras)
mnist <- dataset_mnist()
x_train <- mnist$train$x
y_train <- mnist$train$y
x_test <- mnist$test$x
y_test <- mnist$test$y
Run Code Online (Sandbox Code Playgroud)