@ Ответ Джоша Пейна верен, но я остановлюсь на нем для тех, кто хочет использовать файл .mat с акцентом на типичные расщепления данных.
Сами данные уже были разделены на обучающие и тестовые наборы. Вот как я получил доступ к данным:
from scipy import io as sio
mat = sio.loadmat('emnist-letters.mat')
data = mat['dataset']
X_train = data['train'][0,0]['images'][0,0]
y_train = data['train'][0,0]['labels'][0,0]
X_test = data['test'][0,0]['images'][0,0]
y_train = data['test'][0,0]['labels'][0,0]
Существует дополнительное поле «писатели» (например, data['train'][0,0]['writers'][0,0]
), которое отличает оригинальный образец писателя. Наконец, есть еще одно поле data['mapping']
, но я не уверен, что оно отображает цифры.
Кроме того, в Secion II D в документе EMNIST говорится, что «последняя часть обучающего набора, равная по размеру тестовому набору, отложена в качестве набора проверки». Как ни странно, размер обучения / тестирования файла .mat не соответствует числу, указанному в таблице II, но он соответствует размеру, показанному на рисунке 2.
val_start = X_train.shape[0] - X_test.shape[0]
X_val = X_train[val_start:X_train.shape[0],:]
y_val = y_train[val_start:X_train.shape[0]]
X_train = X_train[0:val_start,:]
y_train = y_train[0:val_start]
Если вам не нужен проверочный набор, можно оставить эти образцы в обучающем наборе.
Кроме того, если вы хотите преобразовать данные в двухмерные изображения размером 28x28 вместо массива 1D 784, чтобы получить правильную ориентацию изображения, вам потребуется выполнить цифровую коррекцию с использованием порядка в Fortran (Matlab использует столбец-мажор упорядочение, так же, как Фортран. ссылка ). например -
X_train = X_train.reshape( (X_train.shape[0], 28, 28), order='F')