train

Обучите мелкую нейронную сеть

Эта функция обучает мелкую нейронную сеть. Для глубокого обучения для сверточных или нейронных сетей LSTM смотрите trainNetwork вместо этого.

Синтаксис

trainedNet = train(net,X,T,Xi,Ai,EW)
[trainedNet,tr] = train(net,X,T,Xi,Ai,EW)
[trainedNet,tr] = train(net,X,T,Xi,Ai,EW,Name,Value)

Описание

пример

trainedNet = train(net,X,T,Xi,Ai,EW) обучает сеть net согласно net.trainFcn и net.trainParam.

[trainedNet,tr] = train(net,X,T,Xi,Ai,EW) также возвращает учебную запись.

пример

[trainedNet,tr] = train(net,X,T,Xi,Ai,EW,Name,Value) обучает сеть с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Примеры

свернуть все

x входа Here и цели, t задает простую функцию, которую можно построить:

x = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
plot(x,t,'o')

Здесь feedforwardnet создает сеть форварда канала 2D слоя. Сеть имеет один скрытый слой с десятью нейронами.

net = feedforwardnet(10);
net = configure(net,x,t);
y1 = net(x)
plot(x,t,'o',x,y1,'x')

Сеть обучена и затем повторно моделирована.

net = train(net,x,t);
y2 = net(x)
plot(x,t,'o',x,y1,'x',x,y2,'*')

Этот пример обучает разомкнутый цикл нелинейно-авторегрессивная сеть с внешним входом, чтобы смоделировать поднимаемую магнитную систему, заданную управлением текущий x и ответ вертикального положения магнита t, затем моделирует сеть. Функциональный preparets готовит данные перед обучением и симуляцией. Это создает объединенные входные параметры сети разомкнутого цикла xo, который содержит и внешний вход x и предыдущие значения положения t. Это также готовится, задержка утверждает xi.

[x,t] = maglev_dataset;
net = narxnet(10);
[xo,xi,~,to] = preparets(net,x,{},t);
net = train(net,xo,to,xi);
y = net(xo,xi)

Эта та же система может также быть моделирована в форме с обратной связью.

netc = closeloop(net);
view(netc)
[xc,xi,ai,tc] = preparets(netc,x,{},t);
yc = netc(xc,xi,ai);

Parallel Computing Toolbox™ позволяет Deep Learning Toolbox™ моделировать и обучать нейронные сети быстрее и на больших наборах данных, чем может соответствовать на одном PC. Параллельное обучение в настоящее время поддержано для обучения обратной связи только, не для самоорганизующихся карт.

Здесь обучение и симуляция происходят через параллельных работников MATLAB.

parpool
[X,T] = vinyl_dataset;
net = feedforwardnet(10);
net = train(net,X,T,'useParallel','yes','showResources','yes');
Y = net(X);

Используйте Составные значения, чтобы распределить данные вручную и возвратить результаты как Составное значение. Если данные загружаются, когда они распределяются затем, в то время как каждая часть набора данных должна поместиться в RAM, целый набор данных ограничивается только общим RAM всех рабочих.

[X,T] = vinyl_dataset;
Q = size(X,2);
Xc = Composite;
Tc = Composite;
numWorkers = numel(Xc);
ind = [0 ceil((1:numWorkers)*(Q/numWorkers))];
for i=1:numWorkers
    indi = (ind(i)+1):ind(i+1);
    Xc{i} = X(:,indi);
    Tc{i} = T(:,indi);
end
net = feedforwardnet;
net = configure(net,X,T);
net = train(net,Xc,Tc);
Yc = net(Xc);

Примечание в примере выше функции конфигурирует, использовался, чтобы установить размерности и настройки обработки входных параметров сети. Это обычно происходит автоматически, когда train называется, но при обеспечении составным данным этот шаг должен быть выполнен вручную с несоставными данными.

Сети могут быть обучены с помощью текущего устройства графического процессора, если оно поддерживается Parallel Computing Toolbox. Обучение графического процессора в настоящее время поддержано для обучения обратной связи только, не для самоорганизующихся карт.

[X,T] = vinyl_dataset;
net = feedforwardnet(10);
net = train(net,X,T,'useGPU','yes');
y = net(X); 

Помещать данные по графическому процессору вручную:

[X,T] = vinyl_dataset;
Xgpu = gpuArray(X);
Tgpu = gpuArray(T);
net = configure(net,X,T);
net = train(net,Xgpu,Tgpu);
Ygpu = net(Xgpu);
Y = gather(Ygpu); 

Примечание в примере выше функции конфигурирует, использовался, чтобы установить размерности и настройки обработки входных параметров сети. Это обычно происходит автоматически, когда train называется, но при обеспечении gpuArray данным этот шаг должен быть выполнен вручную с non-gpuArray данными.

Запускаться параллельно, с рабочими каждый присвоенный различному уникальному графическому процессору, с дополнительными рабочими, работающими на центральном процессоре:

net = train(net,X,T,'useParallel','yes','useGPU','yes');
y = net(X);

Только Используя рабочих с уникальными графическими процессорами может привести к более высокой скорости, когда рабочие центрального процессора не могут поддержать на высоком уровне.

net = train(net,X,T,'useParallel','yes','useGPU','only');
Y = net(X);

Здесь сеть обучена с контрольными точками, сохраненными на уровне, не больше, чем один раз в две минуты.

[x,t] = vinyl_dataset;
net = fitnet([60 30]);
net = train(net,x,t,'CheckpointFile','MyCheckpoint','CheckpointDelay',120);

После компьютерного отказа последняя сеть может восстанавливаться и использоваться, чтобы продолжить обучение от точки отказа. Файл контрольной точки включает переменную checkpoint структуры, которая включает сеть, учебную запись, имя файла, время и номер.

[x,t] = vinyl_dataset;
load MyCheckpoint
net = checkpoint.net;
net = train(net,x,t,'CheckpointFile','MyCheckpoint');

Другое использование для функции контрольной точки состоит в том, когда вы останавливаетесь, параллельный сеанс обучения (запустился с параметра 'UseParallel') даже при том, что Инструмент Обучения Нейронной сети не доступен во время параллельного обучения. В этом случае установите 'CheckpointFile', используйте Ctrl+C, чтобы остановить обучение любое время, затем загрузите ваш файл контрольной точки, чтобы получить сетевую и учебную запись.

Входные параметры

свернуть все

Введите сеть, заданную как объект network. Чтобы создать объект network, используйте, например, feedforwardnet или narxnet.

Сетевые входные параметры, заданные как R-by-Q матрица или Ni-by-TS массив ячеек, где

  • R является входным размером

  • Q является пакетным размером

  • Ni = net.numInputs

  • TS является количеством временных шагов

Аргументы train могут иметь два формата: матрицы, для статических проблем и сетей с одним вводами и выводами и массивов ячеек в течение нескольких тактов и сетей с несколькими вводами и выводами.

  • Матричный формат может использоваться, если только один временной шаг должен быть моделирован (TS = 1). Это удобно для сетей только с одним вводом и выводом, но может использоваться с сетями, которые имеют больше. Когда сеть имеет несколько входных параметров, матричный размер (сумма Ri)-by-Q.

  • Формат массива ячеек является более общим, и более удобным для сетей с несколькими вводами и выводами, позволяя последовательностям входных параметров быть представленным. Каждым элементом X{i,ts} является Ri-by-Q матрица, где Ri = net.inputs{i}.size.

Если Составные данные используются, то 'useParallel' автоматически установлен в 'yes'. Функция берет Составные данные и возвращает Составные результаты.

Если gpuArray данные используются, то 'useGPU' автоматически установлен в 'yes'. Функция берет gpuArray данные и возвращает результаты gpuArray

Примечание

Любые значения NaN во входных параметрах X или цели T, обработаны как недостающие данные. Если столбец X или T содержит по крайней мере один NaN, тот столбец не используется для обучения, тестирования или валидации.

Сетевые цели, заданные как U-by-Q матрица или No-by-TS массив ячеек, где

  • U является выходным размером

  • Q является пакетным размером

  • No = net.numOutputs

  • TS является количеством временных шагов

Аргументы train могут иметь два формата: матрицы, для статических проблем и сетей с одним вводами и выводами и массивов ячеек в течение нескольких тактов и сетей с несколькими вводами и выводами.

  • Матричный формат может использоваться, если только один временной шаг должен быть моделирован (TS = 1). Это удобно для сетей только с одним вводом и выводом, но может использоваться с сетями, которые имеют больше. Когда сеть имеет несколько входных параметров, матричный размер (сумма Ui)-by-Q.

  • Формат массива ячеек является более общим, и более удобным для сетей с несколькими вводами и выводами, позволяя последовательностям входных параметров быть представленным. Каждым элементом T{i,ts} является Ui-by-Q матрица, где Ui = net.outputs{i}.size.

Если Составные данные используются, то 'useParallel' автоматически установлен в 'yes'. Функция берет Составные данные и возвращает Составные результаты.

Если gpuArray данные используются, то 'useGPU' автоматически установлен в 'yes'. Функция берет gpuArray данные и возвращает результаты gpuArray

Обратите внимание на то, что T является дополнительным, и должны только использоваться для сетей, которые требуют целей.

Примечание

Любые значения NaN во входных параметрах X или цели T, обработаны как недостающие данные. Если столбец X или T содержит по крайней мере один NaN, тот столбец не используется для обучения, тестирования или валидации.

Начальный вход задерживает условия, заданные как Ni-by-ID массив ячеек или R-by-(ID*Q) матрица, где

  • ID = net.numInputDelays

  • Ni = net.numInputs

  • R является входным размером

  • Q является пакетным размером

Для входа массива ячеек столбцы Xi упорядочены от самого старого условия задержки до нового: Xi{i,k} является входом i во время ts = k - ID.

Xi является также дополнительным, и должны только использоваться для сетей, которые ввели или задержки слоя.

Начальные условия задержки слоя, заданные как Nl-by-LD массив ячеек или (сумма Si) (LD*Q) матрицей, где

  • Nl = net.numLayers

  • LD = net.numLayerDelays

  • Si = net.layers{i}.size

  • Q является пакетным размером

Для входа массива ячеек столбцы Ai упорядочены от самого старого условия задержки до нового: Ai{i,k} является слоем вывод i во время ts = k - LD.

Ошибочные веса, заданные как No-by-TS массив ячеек или (сумма Ui)-by-Q матрица, где

  • No = net.numOutputs

  • TS является количеством временных шагов

  • Ui = net.outputs{i}.size

  • Q является пакетным размером

Для входа массива ячеек. каждым элементом EW{i,ts} является Ui-by-Q матрица, где

  • Ui = net.outputs{i}.size

  • Q является пакетным размером

Ошибочные веса EW могут также иметь размер 1 вместо всех или любого No, TS, Ui или Q. В этом случае EW является автоматически размерностью, расширенной, чтобы совпадать с целями T. Это допускает удобное взвешивание важности в любой размерности (такой согласно выборке) при наличии равной важности через другого (такой как время с TS=1). Если все размерности равняются 1, например, если EW = {1}, то все целевые значения обработаны с той же важностью. Это - значение по умолчанию EW.

Как отмечено выше, ошибочные веса EW может иметь те же размерности как цели T или иметь некоторый набор размерностей к 1. Например, если EW будет 1 Q, то целевые выборки будут иметь различный importances, но каждый элемент в выборке будет иметь ту же важность. Если EW (сумма Ui)-by-Q, то каждый выходной элемент имеет различную важность со всеми выборками, с которыми относятся та же важность.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'useParallel','yes'

Опция, чтобы задать параллельные вычисления, заданные как 'yes' или 'no'.

  • 'no' – Вычисления происходят на нормальном потоке MATLAB. Это - установка 'useParallel' по умолчанию.

  • 'yes' – Вычисления происходят на параллельных рабочих, если параллельный пул открыт. В противном случае вычисления происходят на нормальном потоке MATLAB®.

Опция, чтобы задать вычисления графического процессора, заданные как 'yes', 'no' или 'only'.

  • 'no' – Вычисления происходят на центральном процессоре. Это - установка 'useGPU' по умолчанию.

  • 'yes' – Вычисления происходят на текущем gpuDevice, если это - поддерживаемый графический процессор (См. Parallel Computing Toolbox для требований графического процессора.), Если текущий gpuDevice не поддержан, вычисления остаются на центральном процессоре. Если 'useParallel' является также 'yes', и параллельный пул открыт, то каждый рабочий с уникальным графическим процессором использует тот графический процессор, другие рабочие выполняют вычисления на своих соответствующих ядрах процессора.

  • 'only' – Если никакой параллельный пул не открыт, то эта установка совпадает с 'yes'. Если параллельный пул открыт затем, только рабочие с уникальными графическими процессорами используются. Однако, если параллельный пул открыт, но не поддержал графические процессоры, доступны, то вычисления возвращаются к выполнению на всех центральных процессорах рабочего.

Опция, чтобы показать ресурсы, заданные как 'yes' или 'no'.

  • 'no' – Не отображайте вычислительные ресурсы, используемые в командной строке. Это - настройка по умолчанию.

  • 'yes' – Покажите в командной строке сводные данные вычислительных ресурсов, на самом деле используемых. Фактические ресурсы могут отличаться от требуемых ресурсов, если вычисление параллели или графического процессора требуют, но параллельный пул не открыт, или поддерживаемый графический процессор не доступен. Когда параллельные рабочие используются, режим вычисления каждого рабочего описан, включая рабочих в пуле, которые не используются.

Сокращение памяти, заданное как положительное целое число.

Для большинства нейронных сетей режим вычисления обучения центрального процессора по умолчанию является скомпилированным алгоритмом MEX. Однако для больших сетей вычисления могут произойти с режимом вычисления MATLAB. Это может быть подтверждено с помощью 'showResources'. Если MATLAB используется, и память является проблемой, устанавливая опцию сокращения на значение N больше, чем 1, уменьшает большую часть временного хранения, требуемого обучаться фактором N, в обмен на более длительные учебные времена.

Файл контрольной точки, заданный как вектор символов.

Значение для 'CheckpointFile' может быть установлено к имени файла, чтобы сохранить в текущей рабочей папке, к пути к файлу в другой папке, или к пустой строке, чтобы отключить контрольную точку сохраняет (значение по умолчанию).

Отметьте контрольной точкой задержку, заданную как неотрицательное целое число.

Дополнительный параметр пределы 'CheckpointDelay', как часто сохраняет, происходит. Ограничение частоты контрольных точек может повысить эффективность путем поддержания контрольных точек сохранения количества времени на низком уровне по сравнению со временем потраченными в вычислениях. Это имеет значение по умолчанию 60, что означает, что контрольная точка сохраняет, не происходят несколько раз в минуту. Установите значение 'CheckpointDelay' к 0, если вы хотите контрольную точку, сохраняет, чтобы произойти только один раз в эпоху.

Выходные аргументы

свернуть все

Обучивший сеть, возвращенный как объект network.

Учебная запись (epoch и perf), возвращенный как структура, поля которой зависят от сетевой учебной функции (net.NET.trainFcn). Это может включать поля, такие как:

  • Обучение, деление данных, и функции производительности и параметры

  • Индексы деления данных для обучения, валидации и наборов тестов

  • Маски деления данных для учебной валидации и наборов тестов

  • Номер эпох (num_epochs) и лучшая эпоха (best_epoch).

  • Список учебных имен состояния (states).

  • Поля для каждого имени состояния, записывающего его значение в течение обучения

  • Производительность лучшей сети (best_perf, best_vperf, best_tperf)

Алгоритмы

train вызывает функцию, обозначенную net.trainFcn, с помощью учебных значений параметров, обозначенных net.trainParam.

Обычно одна эпоха обучения задана как одно представление всех входных векторов к сети. Сеть затем обновляется согласно результатам всех тех представлений.

Обучение происходит, пока максимальное количество эпох не происходит, цели производительности удовлетворяют, или любое другое условие остановки функционального net.trainFcn происходит.

Некоторые учебные функции вылетают от этой нормы путем представления только одного входного вектора (или последовательность) каждая эпоха. Входной вектор (или последовательность) выбран случайным образом в течение каждой эпохи от параллельных входных векторов (или последовательности). competlayer возвращает сети, которые используют trainru, учебная функция, которая делает это.

Смотрите также

| | |

Представлено до R2006a