Как читать базу данных MNIST в R?

в настоящее время я работаю над тематическим исследованием, для которого мне нужно работать над база данных MNIST.
Файлы в этот сайт, как говорят, в формате IDX файла. Я попытался взглянуть на эти файлы с помощью основных текстовых редакторов, таких как блокнот и wordpad, но не повезло.
Ожидая, что они будут в формате high endian, я попробовал следующее:

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

Я получил некоторые числа в качестве вывода, но ни один из них не имел никакого смысла ко мне.

может ли кто-нибудь объяснить, как читать файлы базы данных MNIST в R и как интерпретировать эти цифры? Спасибо.

3 ответов


endian="big", а не "high":

> to.read = file("~/Downloads/t10k-images-idx3-ubyte", "rb")

магическое число:

> readBin(to.read, integer(), n=1, endian="big")
[1] 2051

количество изображений:

> readBin(to.read, integer(), n=1, endian="big")
[1] 10000

количество строк:

> readBin(to.read, integer(), n=1, endian="big")
[1] 28

количество колонок:

> readBin(to.read, integer(), n=1, endian="big")
[1] 28

здесь приходит данные:

> readBin(to.read, integer(), n=1, endian="big")
[1] 0
> readBin(to.read, integer(), n=1, endian="big")
[1] 0

согласно описанию данных по изображения набора тренировки на вебсайте.

теперь вам просто нужно зациклить и прочитать 28 * 28 байтовых кусков в матрицы.

старт опять:

 > to.read = file("~/Downloads/t10k-images-idx3-ubyte", "rb")

пропустить заголовок:

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

должен действительно получить 28,28 из заголовка, но жестко закодированный здесь:

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

может потребоваться транспонировать или перевернуть матрицу, я думаю, что это перевернутый "7".

par(mfrow=c(5,5))
par(mar=c(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])}

получает вас:

enter image description here

О, и google приводит меня к:http://www.inside-r.org/packages/cran/darch/docs/readMNIST что может быть полезно.


после darch (не ~Darch~) пакет, упомянутый выше:

пакет называется darch. Он был перемещен в MRAN (Microsoft R Application Network), но также доступен на CRAN.

он предоставляет две функции для данных MNIST:

readMNIST читает ubyte файлы, хранящиеся на вашем жестком диске и сохраняет их как test.Rdata и train.Rdata архивов.

provideMNIST который загрузит файлы и вызов readMNIST на них.

при вызове этих функций вам нужно дать имена каталогов, разделенных одной чертой, например,readMNIST("..\MNIST\") (требуется последняя косая черта).

если вы загружаете файлы самостоятельно, вам нужно будет изменить имена файлов: архивы gz содержат файлы с расширениями, такими как t10k-этикетки.idx1-ubyte но readMNIST ищет файлы без расширения, как t10k-метки-idx1-ubyte, поэтому вы должны изменить точку на тире (с darch версия 0.12.0, возможно, они исправят это).

для загрузки файлов в R вам нужно использовать


вот как вы можете сделать это с помощью :

выполнить readMNIST('C:/Users/pj_/Dir/')

, который будет хранить test.RData и train.RData в каталоге set. При загрузке этих двух файлов в рабочую область вы сможете увидеть 'testData','testLabels','trainData' и 'trainLabels' в глобальной среде.