Мини-пакетный 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 под названием 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 для обработки данных о последовательности. Сохраните скрипт в файле под названием 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 квалифицируйте его с помощью инструкций, представленных в Руководстве по тестированию для Пользовательских Хранилищ данных (MATLAB).