Поезд неглубокой нейронной сети
Эта функция обучает неглубокую нейронную сеть. Для глубокого обучения с помощью сверточных или LSTM нейронных сетей, см. trainNetwork вместо этого.
[ направляет сеть с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение.trainedNet,tr] = train(net,X,T,Xi,Ai,EW,Name,Value)
Здесь вход x и целевые показатели 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 создает двухуровневую сеть прямой передачи. Сеть имеет один скрытый слой с десятью нейронами.
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™ позволяет Toolbox™ Deep Learning моделировать и обучать сети быстрее и на больших наборах данных, чем на одном компьютере. Параллельное обучение в настоящее время поддерживается только для подготовки по вопросам распространения, а не для самоорганизующихся карт.
Здесь обучение и моделирование происходит для параллельных работников MATLAB.
parpool [X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X);
Используйте составные значения для распределения данных вручную и получения результатов как составного значения. Если данные загружаются по мере их распределения, то в то время как каждый элемент набора данных должен помещаться в ОЗУ, весь набор данных ограничивается только общим объемом ОЗУ всех работников.
[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);
Обратите внимание, что в приведенном выше примере настройка функции использовалась для установки размеров и параметров обработки входов сети. Обычно это происходит автоматически при вызове поезда, но при предоставлении составных данных этот шаг должен быть выполнен вручную с данными, не являющимися составными.
Сети можно обучить с помощью текущего графического процессора, если он поддерживается Parallel Computing Toolbox. Обучение GPU в настоящее время поддерживается только для обучения backpropagation, а не для самоорганизующихся карт.
[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);
Обратите внимание, что в приведенном выше примере настройка функции использовалась для установки размеров и параметров обработки входов сети. Обычно это происходит автоматически при вызове поезда, но при предоставлении данных gpuArray этот шаг должен быть выполнен вручную с данными, отличными от gpuArray.
Для параллельной работы с рабочими, каждый из которых назначен другому уникальному графическому процессору, с дополнительными рабочими, работающими на CPU:
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, чтобы прекратить обучение в любое время, а затем загрузите файл контрольной точки, чтобы получить сетевую и учебную запись.
net - Входная сетьnetwork объектВходная сеть, указанная как network объект. Создание network объект, например, feedforwardnet или narxnet.
X - Сетевые входыСетевые входы, указанные как Rоколо-Q матрица или Niоколо-TS массив ячеек, где
R - входной размер
Q - размер партии
Ni = net.numInputs
TS - количество временных шагов
train аргументы могут иметь два формата: матрицы, для статических задач и сетей с одиночными входами и выходами, и массивы ячеек для нескольких временных интервалов и сетей с множеством входов и выходов.
Формат матрицы можно использовать, если необходимо смоделировать только один временной шаг (TS = 1). Это удобно для сетей только с одним входом и выходом, но может использоваться с сетями, которые имеют больше. Когда сеть имеет несколько входов, размер матрицы (сумма Riоколо-Q.
Формат массива ячеек является более общим и более удобным для сетей с множеством входов и выходов, что позволяет представлять последовательности входов. Каждый элемент X{i,ts} является Riоколо-Q матрица, где Ri = net.inputs{i}.size.
Если используются составные данные, то 'useParallel' автоматически устанавливается в значение 'yes'. Функция берет составные данные и возвращает составные результаты.
Если используются данные gpuArray, то 'useGPU' автоматически устанавливается в значение 'yes'. Функция принимает данные gpuArray и возвращает результаты gpuArray
Примечание
Если столбец X содержит хотя бы один NaN, train не использует этот столбец для обучения, тестирования или проверки. Если целевое значение в T является NaN, то train игнорирует эту строку и использует другие строки для обучения, тестирования или проверки.
T - Сетевые целиСетевые цели, указанные как Uоколо-Q матрица или Noоколо-TS массив ячеек, где
U - размер вывода
Q - размер партии
No = net.numOutputs
TS - количество временных шагов
train аргументы могут иметь два формата: матрицы, для статических задач и сетей с одиночными входами и выходами, и массивы ячеек для нескольких временных интервалов и сетей с множеством входов и выходов.
Формат матрицы можно использовать, если необходимо смоделировать только один временной шаг (TS = 1). Это удобно для сетей только с одним входом и выходом, но может использоваться с сетями, которые имеют больше. Когда сеть имеет несколько входов, размер матрицы (сумма Uiоколо-Q.
Формат массива ячеек является более общим и более удобным для сетей с множеством входов и выходов, что позволяет представлять последовательности входов. Каждый элемент T{i,ts} является Uiоколо-Q матрица, где Ui = net.outputs{i}.size.
Если используются составные данные, то 'useParallel' автоматически устанавливается в значение 'yes'. Функция берет составные данные и возвращает составные результаты.
Если используются данные gpuArray, то 'useGPU' автоматически устанавливается в значение 'yes'. Функция принимает данные gpuArray и возвращает результаты gpuArray
Обратите внимание, что T является необязательным и должен использоваться только для сетей, для которых требуются целевые объекты.
Примечание
Любой NaN значения на входах X или цели T, рассматриваются как отсутствующие данные. Если столбец X или T содержит, по крайней мере, один NaN, этот столбец не используется для обучения, тестирования или проверки.
Xi - Условия начальной задержки на входеИсходные условия задержки на входе, указанные как Niоколо-ID массив ячеек или Rоколо-(ID*Q) матрица, где
ID = net.numInputDelays
Ni = net.numInputs
R - входной размер
Q - размер партии
Для ввода массива ячеек столбцы Xi упорядочены от самого старого условия задержки до самого последнего: Xi{i,k} является входом i в момент времени ts = k - ID.
Xi также является необязательным и должен использоваться только для сетей с задержками на входе или уровне.
Ai - Условия задержки начального уровняУсловия задержки начального уровня, указанные как Nlоколо-LD массив ячеек или (сумма SiоколоLD*Q) матрица, где
Nl = net.numLayers
LD = net.numLayerDelays
Si = net.layers{i}.size
Q - размер партии
Для ввода массива ячеек столбцы Ai упорядочены от самого старого условия задержки до самого последнего: Ai{i,k} - выходной уровень i в момент времени ts = k - LD.
EW - Веса ошибокВеса ошибок, указанные как Noоколо-TS массив ячеек или (сумма Uiоколо-Q матрица, где
No = net.numOutputs
TS - количество временных шагов
Ui = net.outputs{i}.size
Q - размер партии
Для ввода массива ячеек. каждый элемент EW{i,ts} является Uiоколо-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-by-Q, тогда целевые образцы будут иметь различные импорты, но каждый элемент в выборке будет иметь одинаковую важность. Если EW is (сумма Ui) по-1, то каждый выходной элемент имеет различную важность, причем все образцы обрабатываются с одинаковой важностью.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'useParallel','yes''useParallel' - Параметр для задания параллельных вычислений'no' (по умолчанию) | 'yes'Параметр для задания параллельных вычислений, указанный как 'yes' или 'no'.
'no' - Вычисления выполняются в обычном потоке MATLAB. Это значение по умолчанию 'useParallel' установка.
'yes' - Вычисления выполняются для параллельных работников, если открыт параллельный пул. В противном случае вычисления выполняются в обычном потоке MATLAB ®.
'useGPU' - Возможность задания вычислений графического процессора'no' (по умолчанию) | 'yes' | 'only'Параметр для задания вычислений графического процессора, указанный как 'yes', 'no', или 'only'.
'no' - Вычисления выполняются на CPU. Это значение по умолчанию 'useGPU' установка.
'yes' - Расчеты выполняются на текущем gpuDevice если это поддерживаемый графический процессор (требования к графическому процессору см. в разделе Панель инструментов параллельных вычислений). Если текущий gpuDevice не поддерживается, вычисления остаются на ЦП. Если 'useParallel' также 'yes' и параллельный пул открыт, то каждый работник с уникальным графическим процессором использует этот графический процессор, другие работники выполняют вычисления на своих соответствующих ядрах ЦП.
'only' - Если параллельный пул не открыт, этот параметр совпадает с 'yes'. Если открыт параллельный пул, то используются только работники с уникальными графическими процессорами. Однако если параллельный пул открыт, но нет поддерживаемых графических процессоров, вычисления возвращаются к выполнению на всех рабочих процессорах.
'showResources' - Возможность отображения ресурсов'no' (по умолчанию) | 'yes'Параметр отображения ресурсов, указанный как 'yes' или 'no'.
'no' - Не отображать вычислительные ресурсы, используемые в командной строке. Это параметр по умолчанию.
'yes' - Отображение в командной строке сводки фактически используемых вычислительных ресурсов. Фактические ресурсы могут отличаться от запрашиваемых ресурсов, если запрашиваются параллельные вычисления или вычисления GPU, но параллельный пул не открыт или поддерживаемый GPU недоступен. При использовании параллельных работников описывается режим вычислений каждого работника, включая работников в пуле, которые не используются.
'reduction' - Уменьшение памятиУменьшение памяти, указанное как положительное целое число.
Для большинства нейронных сетей режимом тренировочных вычислений CPU по умолчанию является скомпилированный алгоритм MEX. Однако для больших сетей вычисления могут выполняться в режиме вычисления MATLAB. Это можно подтвердить с помощью 'showResources'. Если MATLAB используется, а память является проблемой, установка опции сокращения на значение N больше 1 уменьшает большую часть временного хранилища, необходимого для обучения, в коэффициент N, в обмен на более продолжительное время обучения.
'CheckpointFile' - Файл контрольной точки'' (по умолчанию) | символьный векторФайл контрольной точки, указанный как символьный вектор.
Значение для 'CheckpointFile' можно задать имя файла для сохранения в текущей рабочей папке, путь к файлу в другой папке или пустую строку для отключения сохранения контрольных точек (значение по умолчанию).
'CheckpointDelay' - Задержка контрольной точкиЗадержка контрольной точки, заданная как неотрицательное целое число.
Необязательный параметр 'CheckpointDelay' ограничивает частоту сохранения. Ограничение частоты контрольных точек может повысить эффективность за счет сохранения количества времени, экономящего контрольные точки, на низком уровне по сравнению с временем, затраченным в расчетах. Он имеет значение по умолчанию 60, что означает, что сохранение контрольных точек происходит не более одного раза в минуту. Установка значения 'CheckpointDelay' до 0, если требуется, чтобы сохранение контрольных точек выполнялось только один раз в каждую эпоху.
trainedNet - Обученная сетьnetwork объектОбученная сеть, возвращенная как network объект.
tr - Запись об обученииЗапись об обучении (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, обучающая функция, которая делает это.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.