Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных в пакетах. Можно использовать мини-пакетный datastore в качестве источника обучения, валидации, теста и наборов данных предсказания для применения глубокого обучения то использование Deep Learning Toolbox™.
Чтобы предварительно обработать последовательность, временные ряды или текстовые данные, создают ваш собственный мини-пакетный datastore с помощью среды, описанной здесь. Для примера, показывающего, как использовать пользовательский мини-пакетный datastore, смотрите, Обучат сеть Используя Пользовательский Мини-пакетный Datastore для Данных о Последовательности.
Создайте свой пользовательский интерфейс datastore использование пользовательских классов datastore и объектов. Затем используйте пользовательский datastore, чтобы принести ваши данные в MATLAB®.
Разработка вашего пользовательского мини-пакетного datastore включает наследование от matlab.io.Datastore
и matlab.io.datastore.MiniBatchable
классы и реализация необходимых свойств и методов. Опционально можно добавить поддержку перестановки во время обучения.
Обработка потребностей | Классы |
---|---|
Мини-пакетный datastore для обучения, валидации, теста и наборов данных предсказания в Deep Learning Toolbox |
Смотрите MiniBatchable Datastore реализации. |
Мини-пакетный datastore с поддержкой перестановки во время обучения |
Смотрите добавляет поддержка перестановки. |
MiniBatchable
DatastoreРеализовывать пользовательский мини-пакетный datastore под названием MyDatastore
, создайте скрипт MyDatastore.m
. Скрипт должен быть на пути MATLAB и должен содержать код, который наследовался соответствующему классу и задает требуемые методы. Код для создания мини-пакетного datastore для обучения, валидации, теста и наборов данных предсказания в Deep Learning Toolbox должен:
Наследуйте от классов matlab.io.Datastore
и matlab.io.datastore.MiniBatchable
.
Задайте эти свойства: MiniBatchSize
и NumObservations
.
В дополнение к этим шагам можно задать любые другие свойства или методы, что необходимо обработать и анализировать данные.
Примечание
Если вы обучаете сеть и trainingOptions
задает 'Shuffle'
как 'once'
или 'every-epoch'
, затем необходимо также наследоваться matlab.io.datastore.Shuffleable
класс. Для получения дополнительной информации смотрите, Добавляет Поддержка Перестановки.
Функция чтения datastore должна возвратить данные в таблице. Табличными элементами должны быть скаляры, векторы-строки или массивы ячеек 1 на 1, содержащие числовой массив.
Для сетей с одним входным слоем первые и вторые столбцы задают предикторы и ответы, соответственно.
Совет
Чтобы использовать datastore для сетей с несколькими входными слоями, используйте combine
и transform
функции, чтобы создать datastore, который выводит массив ячеек с (numInputs
+ 1) столбцы, где numInputs
количество сетевых входных параметров. В этом случае, первый numInputs
столбцы задают предикторы для каждого входа, и последний столбец задает ответы. Распоряжение входных параметров дано InputNames
свойство графика слоев layers
.
Формат предикторов зависит от типа данных.
Данные | Формат предикторов |
---|---|
2D изображение | 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, является длиной последовательности. |
2D последовательность изображений | 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-by-1 вектор-столбец, где c является количеством функций. |
Табличные элементы должны содержать числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.
trainNetwork
функция не поддерживает сети с несколькими входными слоями последовательности.
Формат ответов зависит от типа задачи.
Задача | Формат ответов |
---|---|
Классификация | Категориальный скаляр |
Регрессия |
|
Классификация от последовательности к последовательности | 1 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 квалифицируйте его с помощью инструкций, представленных в Руководстве по тестированию для Пользовательских Хранилищ данных.