dlfeval

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

Описание

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

Совет

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

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

пример

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

Примеры

свернуть все

Функция Розенброка является стандартной тестовой функцией для оптимизации. 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 = 
  1x1 dlarray

   104

gradval = 
  1x2 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 = 
  1x1 dlarray

   104

dydx1 = 
  1x1 dlarray

   396

dydx2 = 
  1x1 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')

Figure contains an axes. The axes contains an object of type quiver.

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

свернуть все

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

Пример: @rosenbrock

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

Аргументы функции в виде любого типа данных MATLAB или dlnetwork объект.

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

Чтобы оценить градиенты для глубокого обучения, можно обеспечить dlnetwork возразите как аргумент функции и оцените прямую передачу сети в fun.

Пример: 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

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

свернуть все

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

Советы

Введенный в R2019b