2014-02-03 6 views
7

В настоящее время я работаю над тематическим исследованием, для которого мне нужно работать на MNIST database.
Файлы в формате this site, говорят, находятся в формате файла IDX. Я попытался взглянуть на эти файлы, используя основные текстовые редакторы, такие как блокнот и блокнот, но не повезло.
Ожидая, что они будут в высоком формате обратного порядка, я попытался следующие:Как читать базу данных MNIST в R?

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

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

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

ответ

17

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 байтовых фрагментов в матрицах.

Start снова:

> 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, которые могут быть полезны.

+0

Wow! Большое спасибо за описательный ответ. – StrikeR

+1

Я просто собирался написать «endian =» большой «не« высокий », но немного увлекся. Возможно, вы также сможете их прочитать используя растровый пакет ... – Spacedman

+0

Спасибо за ответ, но у меня есть вопрос. Эта строка кода не работает для меня: «par (mar = c (0,0))». Он дает эту ошибку: «Ошибка в par (mar = c (0, 0)): Графический параметр« mar »имеет неправильную длину« –

2

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

Run readMNIST('C:/Users/pj_/Dir/')

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

1

Следуя на darch (не ~ Darch ~) пакет упомянутых выше:

Пакет называется darch. Он перенесен в MRAN (прикладная сеть Microsoft R), но также доступен на CRAN.

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

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

provideMNIST который будет загружать файлы и звонить по ним readMNIST.

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

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

Чтобы загрузить файлы в R вам нужно использовать функцию load (например load("..\\MNIST\\test.Rdata"). Это позволит создать матрицы trainData и Testdata в окружающей среде.

По какой-то причине я не получал никаких dimnames для матриц

Смежные вопросы