dlfeval

Оцените модель глубокого обучения для пользовательских учебных циклов

Описание

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

Совет

Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу, учащуюся переобучать сверточную нейронную сеть, чтобы классифицировать новый набор изображений, смотрите, Обучают Нейронную сеть для глубокого обучения Классифицировать Новые Изображения. В качестве альтернативы можно создать и обучить нейронные сети с нуля с помощью layerGraph объекты с trainNetwork и trainingOptions функции.

Если trainingOptions функция не обеспечивает опции обучения, в которых вы нуждаетесь для своей задачи, затем можно создать пользовательский учебный цикл с помощью автоматического дифференцирования. Чтобы узнать больше, смотрите, Задают Пользовательские Учебные Циклы.

пример

[y1,...,yk] = dlfeval(fun,x1,...,xn) оценивает функцию массива глубокого обучения fun во входных параметрах x1, …, xn. Функции передали dlfeval может содержать вызовы dlgradient, которые вычисляют градиенты из входных параметров x при помощи автоматического дифференцирования.

Примеры

свернуть все

Функция Розенброка является стандартной тестовой функцией для оптимизации. rosenbrock.m функция помощника вычисляет значение функции и использует автоматическое дифференцирование, чтобы вычислить его градиент.

type rosenbrock.m
function [y,dydx] = rosenbrock(x)

y = 100*(x(2) - x(1).^2).^2 + (1 - x(1)).^2;
dydx = dlgradient(y,x);

end

Выполнять функцию Розенброка и ее градиент в точке [–1,2], создайте dlarray из точки и затем вызывают dlfeval на указателе на функцию @rosenbrock.

x0 = dlarray([-1,2]);
[fval,gradval] = dlfeval(@rosenbrock,x0)
fval = 
  1×1 dlarray

   104

gradval = 
  1×2 dlarray

   396   200

В качестве альтернативы задайте функцию Розенброка как функцию двух входных параметров, x1 и x2.

type rosenbrock2.m
function [y,dydx1,dydx2] = rosenbrock2(x1,x2)

y = 100*(x2 - x1.^2).^2 + (1 - x1).^2;
[dydx1,dydx2] = dlgradient(y,x1,x2);

end

Вызовите dlfeval оценивать rosenbrock2 на двух dlarray аргументы, представляющие входные параметры –1 и 2.

x1 = dlarray(-1);
x2 = dlarray(2);
[fval,dydx1,dydx2] = dlfeval(@rosenbrock2,x1,x2)
fval = 
  1×1 dlarray

   104

dydx1 = 
  1×1 dlarray

   396

dydx2 = 
  1×1 dlarray

   200

Постройте градиент функции Розенброка для нескольких точек в модульном квадрате. Во-первых, инициализируйте массивы, представляющие точки оценки и выход функции.

[X1 X2] = meshgrid(linspace(0,1,10));
X1 = dlarray(X1(:));
X2 = dlarray(X2(:));
Y = dlarray(zeros(size(X1)));
DYDX1 = Y;
DYDX2 = Y;

Выполните функцию в цикле. Постройте результат с помощью quiver.

for i = 1:length(X1)
    [Y(i),DYDX1(i),DYDX2(i)] = dlfeval(@rosenbrock2,X1(i),X2(i));
end
quiver(extractdata(X1),extractdata(X2),extractdata(DYDX1),extractdata(DYDX2))
xlabel('x1')
ylabel('x2')

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

свернуть все

Функция, чтобы оценить, определенный функцией указатель. Если fun включает dlgradient вызовите, затем dlfeval оценивает градиент при помощи автоматического дифференцирования. В этой оценке градиента, каждом аргументе dlgradient вызовом должен быть dlarray или массив ячеек, структура или таблица, содержащая dlarray. Количество входных параметров к dlfeval должен совпасть с количеством входных параметров к fun.

Пример: @rosenbrock

Типы данных: function_handle

Аргумент функции, заданный как любой тип данных MATLAB.

Входной параметр xj, который является переменной дифференцирования в dlgradient вызовом должен быть прослеженный dlarray или массив ячеек, структура или таблица, содержащая прослеженный dlarray. Дополнительной переменной, такой как гиперпараметр или постоянный массив данных не должен быть dlarray.

Пример: dlarray([1 2;3 4])

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi

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

свернуть все

Функциональный выходной параметр, возвращенный как любой тип данных. Если выход следует из dlgradient вызовите, выходом является dlarray.

Советы

  • dlgradient вызов должен быть в функции. Чтобы получить числовое значение градиента, необходимо выполнить функцию с помощью dlfeval, и аргументом к функции должен быть dlarray. Смотрите использование автоматическое дифференцирование в Deep Learning Toolbox.

  • dlgradient не поддерживает производные высшего порядка. Другими словами, вы не можете передать выход dlgradient вызовите в другой dlgradient вызвать.

  • Включить правильную оценку градиентов, функционального fun должен использовать только поддерживаемые функции в dlarray. См. Список Функций с Поддержкой dlarray.

Введенный в R2019b