Мини-хранилище пакетных данных представляет собой реализацию хранилища данных с поддержкой считывания данных в пакетах. Хранилище данных мини-пакета можно использовать в качестве источника наборов данных обучения, проверки, тестирования и прогнозирования для приложений глубокого обучения, использующих Toolbox™ глубокого обучения.
Для предварительной обработки последовательности, временных рядов или текстовых данных создайте собственное хранилище данных мини-пакета, используя описанную здесь структуру. Пример использования пользовательского мини-хранилища пакетных данных см. в разделе Подготовка сети с использованием пользовательского мини-хранилища пакетных данных для данных последовательности.
Создайте пользовательский интерфейс хранилища данных с помощью пользовательских классов и объектов хранилища данных. Затем используйте пользовательское хранилище данных для переноса данных в MATLAB ®.
Создание пользовательского мини-хранилища пакетных данных включает наследование от matlab.io.Datastore и matlab.io.datastore.MiniBatchable и реализация требуемых свойств и методов. При необходимости можно добавить поддержку тасования во время обучения.
Потребности в обработке | Классы |
|---|---|
Мини-хранилище пакетных данных для обучения, проверки, тестирования и прогнозирования наборов данных в инструментарии Deep Learning Toolbox |
См. раздел Внедрение хранилища данных MiniBatchable. |
Мини-хранилище пакетных данных с поддержкой тасования во время обучения |
См. раздел Добавление поддержки для перетасовки. |
MiniBatchable Хранилище данныхДля реализации пользовательского хранилища данных мини-пакета с именем MyDatastore, создать сценарий MyDatastore.m. Сценарий должен находиться в пути MATLAB и содержать код, наследующий от соответствующего класса и определяющий требуемые методы. Код для создания мини-хранилища данных для наборов данных обучения, проверки, тестирования и прогнозирования в Deep Learning Toolbox должен:
Наследовать от классов matlab.io.Datastore и matlab.io.datastore.MiniBatchable.
Определите следующие свойства: MiniBatchSize и NumObservations.
Определите следующие методы: hasdata, read, reset, и progress.
В дополнение к этим шагам можно определить любые другие свойства или методы, необходимые для обработки и анализа данных.
Примечание
Если вы обучаете сеть и trainingOptions определяет 'Shuffle' как 'once' или 'every-epoch', то вы также должны наследовать от matlab.io.datastore.Shuffleable класс. Дополнительные сведения см. в разделе Добавление поддержки перетасовки.
Функция чтения хранилища данных должна возвращать данные в таблице. Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив.
Для сетей с одним входным уровнем первый и второй столбцы определяют предикторы и отклики соответственно.
Совет
Чтобы использовать хранилище данных для сетей с несколькими входными уровнями, используйте combine и transform для создания хранилища данных, которое выводит массив ячеек с помощью (numInputs + 1) столбцы, где numInputs - количество сетевых входов. При этом первый numInputs столбцы задают предикторы для каждого ввода, а последний столбец задает отклики. Порядок входных данных задается InputNames свойство графа слоев layers.
Формат предикторов зависит от типа данных.
| Данные | Формат предикторов |
|---|---|
| 2-D изображение | h-by-w-by-c числовой массив, где h, w и c - высота, ширина и количество каналов изображения соответственно. |
| 3-D изображение | h-by-w-by-d-by-c числовой массив, где h, w, d и c - высота, ширина, глубина и количество каналов изображения соответственно. |
| Векторная последовательность | матрица c-by-s, где c - число признаков последовательности, а s - длина последовательности. |
| 2-D последовательность изображений | h-by-w-by-c-by-s массив, где h, w и c соответствуют высоте, ширине и количеству каналов изображения соответственно, а s - длина последовательности. Каждая последовательность в мини-партии должна иметь одинаковую длину. |
| 3-D последовательность изображений | h-by-w-d-by-c-by-s массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, и s - длина последовательности. Каждая последовательность в мини-партии должна иметь одинаковую длину. |
| Особенности | вектор столбца c-by-1, где c - количество элементов. |
Элементы таблицы должны содержать числовой скаляр, числовой вектор строки или массив ячеек 1 на 1, содержащий числовой массив.
trainNetwork функция не поддерживает сети с несколькими уровнями ввода последовательности.
Формат ответов зависит от типа задачи.
| Задача | Формат ответов |
|---|---|
| Классификация | Категориальный скаляр |
| Регресс |
|
| Классификация последовательности к последовательности | Последовательность 1 на s категориальных меток, где s - длина последовательности соответствующей последовательности предиктора. |
| Регрессия последовательности к последовательности | Матрица R-by-s, где R - количество откликов, а s - длина последовательности соответствующей последовательности предиктора. |
Элементы таблицы должны содержать категориальный скаляр, числовой скаляр, числовой вектор строки или массив ячеек 1 на 1, содержащий числовой массив.
В этом примере показано, как создать пользовательское хранилище данных мини-пакета для обработки данных последовательности. Сохранение сценария в файле с именем MySequenceDatastore.m.
| Шаги | Внедрение |
|---|---|
| classdef MySequenceDatastore < matlab.io.Datastore & ... matlab.io.datastore.MiniBatchable properties Datastore Labels NumClasses SequenceDimension MiniBatchSize end properties(SetAccess = protected) NumObservations end properties(Access = private) % This property is inherited from Datastore CurrentFileIndex end methods function ds = MySequenceDatastore(folder) % Construct a MySequenceDatastore object % Create a file datastore. The readSequence function is % defined following the class definition. fds = fileDatastore(folder, ... 'ReadFcn',@readSequence, ... 'IncludeSubfolders',true); ds.Datastore = fds; % Read labels from folder names numObservations = numel(fds.Files); for i = 1:numObservations file = fds.Files{i}; filepath = fileparts(file); [~,label] = fileparts(filepath); labels{i,1} = label; end ds.Labels = categorical(labels); ds.NumClasses = numel(unique(labels)); % Determine sequence dimension. When you define the LSTM % network architecture, you can use this property to % specify the input size of the sequenceInputLayer. X = preview(fds); ds.SequenceDimension = size(X,1); % Initialize datastore properties. ds.MiniBatchSize = 128; ds.NumObservations = numObservations; ds.CurrentFileIndex = 1; end function tf = hasdata(ds) % Return true if more data is available tf = ds.CurrentFileIndex + ds.MiniBatchSize - 1 ... <= ds.NumObservations; end function [data,info] = read(ds) % Read one mini-batch batch of data miniBatchSize = ds.MiniBatchSize; info = struct; for i = 1:miniBatchSize predictors{i,1} = read(ds.Datastore); responses(i,1) = ds.Labels(ds.CurrentFileIndex); ds.CurrentFileIndex = ds.CurrentFileIndex + 1; end data = preprocessData(ds,predictors,responses); end function data = preprocessData(ds,predictors,responses) % data = preprocessData(ds,predictors,responses) preprocesses % the data in predictors and responses and returns the table % data miniBatchSize = ds.MiniBatchSize; % Pad data to length of longest sequence. sequenceLengths = cellfun(@(X) size(X,2),predictors); maxSequenceLength = max(sequenceLengths); for i = 1:miniBatchSize X = predictors{i}; % Pad sequence with zeros. if size(X,2) < maxSequenceLength X(:,maxSequenceLength) = 0; end predictors{i} = X; end % Return data as a table. data = table(predictors,responses); end function reset(ds) % Reset to the start of the data reset(ds.Datastore); ds.CurrentFileIndex = 1; end end methods (Hidden = true) function frac = progress(ds) % Determine percentage of data read from datastore frac = (ds.CurrentFileIndex - 1) / ds.NumObservations; end end end % end class definition readSequence. Эту функцию необходимо создать для считывания данных последовательности из MAT-файла.function data = readSequence(filename) % data = readSequence(filename) reads the sequence X from the MAT-file % filename S = load(filename); data = S.X; end |
Для добавления поддержки тасования сначала следуйте инструкциям в Implement MiniBatchable Datastore, а затем обновите код внедрения в MySequenceDatastore.m кому:
Наследовать от дополнительного класса matlab.io.datastore.Shuffleable.
Определение дополнительного метода shuffle.
Этот пример кода добавляет поддержку тасования к MySequenceDatastore класс. Вертикальные эллипсы указывают место копирования кода из MySequenceDatastore реализация.
| Шаги | Внедрение |
|---|---|
|
classdef MySequenceDatastore < matlab.io.Datastore & ... matlab.io.datastore.MiniBatchable & ... matlab.io.datastore.Shuffleable % previously defined properties . . . methods % previously defined methods . . . function dsNew = shuffle(ds) % dsNew = shuffle(ds) shuffles the files and the % corresponding labels in the datastore. % Create a copy of datastore dsNew = copy(ds); dsNew.Datastore = copy(ds.Datastore); fds = dsNew.Datastore; % Shuffle files and corresponding labels numObservations = dsNew.NumObservations; idx = randperm(numObservations); fds.Files = fds.Files(idx); dsNew.Labels = dsNew.Labels(idx); end end end |
Если вы выполнили все представленные здесь инструкции, то внедрение собственного хранилища данных мини-пакета завершено. Прежде чем использовать это хранилище данных, оцените его, используя рекомендации, представленные в Руководстве по тестированию пользовательских хранилищ данных.