@Fear1

Как прочитать файл MNIST в php?

Подскажите как прочитать файл mnist в php. Целый день рою интернет и не могу разобраться, так как плохо знаю php да и вообще как работать с бинарными файлами.

Сейчас, если вывести первый элемент массива файла, то получаю результат в непонятной кодировке.

Помогите понять как достать из файла, например, первую картинку, в которой 28x28 значений для пикселей. Хочется разобрать в нейронных сетях на примерах, а одному никак не получается.

Сам mnist: yann.lecun.com/exdb/mnist
  • Вопрос задан
  • 370 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
По вашей же ссылке, ниже, идёт описание формата файлов:
[offset] [type]          [value]          [description]
0000     32 bit integer  0x00000803(2051) magic number
0004     32 bit integer  60000            number of images
0008     32 bit integer  28               number of rows
0012     32 bit integer  28               number of columns
0016     unsigned byte   ??               pixel
0017     unsigned byte   ??               pixel
........
xxxx     unsigned byte   ??               pixel


Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).


Т.е. грубо говоря, можно проигнорировать заголовок, отмотать сразу на 16-й байт и прочитать 784 байта первой картинки. Каждый байт это яркость очередного серого (одноканального) пикселя: 0 белый, 255 черный.

В PHP
  • открыть файл fopen() как бинарный ('b' нужно только в Windows): $fh = fopen('train-images-idx3-ubyte', 'rb');
  • отмотать fseek() на 16-й байт:
    fseek( $fh, 16);
  • Прочитать fread() 784 байта: $byteString = fread($fh, 784);


Дальше можете работать со строкой или распаковать unpack() байты:
$arr = unpack( 'C*', $byteString);
$arr[28] // яркость первого пикселя во второй строке


P.S. но с оптимизмом глядя в будущее, я бы порекомендовал заморочиться и освоить Python, т.к. для него на порядки больше библиотек, уроков и людей в теме машинного обучения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы