Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных пакетами. Можно использовать мини-пакетный datastore как источник обучения, валидации, тестирования и предсказания наборов данных для применений глубокого обучения, которые используют Deep Learning Toolbox™.
Чтобы предварительно обработать последовательность, временные ряды или текстовые данные, создайте свой собственный мини-пакетный datastore с помощью описанной здесь среды. Пример использования пользовательского мини-пакета datastore см. в разделе Train сети с использованием пользовательского мини-пакета Datastore для данных последовательности.
Создайте пользовательский интерфейс datastore с помощью пользовательских классов datastore и объектов. Затем используйте пользовательский datastore, чтобы перенести ваши данные в MATLAB®.
Разработка пользовательского мини-пакетного datastore включает наследование от matlab.io.Datastore
и matlab.io.datastore.MiniBatchable
классы и реализация необходимых свойств и методов. Вы можете добавить поддержку тасования во время обучения.
Потребности в обработке | Классы |
---|---|
Мини-пакетный datastore для обучения, валидации, тестирования и предсказания наборов данных в Deep Learning Toolbox | |
Мини-пакетный datastore с поддержкой тасования во время обучения |
|
MiniBatchable
DatastoreДля реализации пользовательского мини-пакетного datastore с именем MyDatastore
, создайте скрипт MyDatastore.m
. Скрипт должен находиться в пути MATLAB и содержать код, который наследует от соответствующего класса и определяет необходимые методы. Код для создания мини-пакетного datastore для обучения, валидации, тестирования и предсказания наборов данных в 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
класс. Для получения дополнительной информации см. раздел «Добавление поддержки для тасования».
Функция чтения datastore должна возвращать данные в таблице. Элементами таблицы должны быть скаляры, векторы-строки или массивы ячеек 1 на 1, содержащие числовой массив.
Для сетей с одним входным слоем первый и второй столбцы задают предикторы и отклики, соответственно.
Совет
Чтобы использовать datastore для сетей с несколькими входными слоями, используйте combine
и transform
функции для создания datastore, который выводит массив ячеек с (numInputs
+ 1) столбцы, где numInputs
- количество входов сети. В этом случае первый numInputs
столбцы задают предикторы для каждого входа, а последний столбец задает отклики. Порядок входов задается InputNames
свойство графика слоев layers
.
Формат предикторов зависит от типа данных.
Данные | Формат предикторов |
---|---|
2-D изображение | h -by w -by c числовой массив, где h, w и c являются высотой, шириной и количеством каналов изображения, соответственно. |
3-D изображение | h w d 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 -by- d -by- c -by- s массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, и s является длиной последовательности. Каждая последовательность в мини-пакете должна иметь одинаковую длину. |
Функции | c вектор-на-1, где c количество функций. |
Элементы таблицы должны содержать числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.
trainNetwork
функция не поддерживает сети с несколькими входными слоями последовательности.
Формат ответов зависит от типа задачи.
Задача | Формат ответов |
---|---|
Классификация | Категориальный скаляр |
Регресс |
|
Классификация последовательность-последовательность | 1-by - s последовательность категориальных меток, где s - длина последовательности соответствующей последовательности предикторов. |
Регрессия от последовательности к последовательности | R -by - s матрица, где R - количество откликов, а s - длина последовательности соответствующего предиктора. |
Элементы таблицы должны содержать категориальный скаляр, числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.
В этом примере показано, как создать пользовательский мини-пакет datastore для обработки данных последовательности. Сохраните скрипт в файле с именем 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 |
Чтобы добавить поддержку тасования, сначала следуйте инструкциям в реализации 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 |
Если вы выполнили все инструкции, представленные здесь, то реализация вашего пользовательского мини-пакетного datastore завершена. Перед использованием этого datastore проверьте его с помощью руководящих принципов, представленных в Руководствах по тестированию для пользовательских хранилищ данных.