主要内容

dlfeval

评估深度学习循环模型定制培训

描述

使用dlfeval评估定义深度学习模型自定义训练循环。

提示

对于大多数深度学习的任务,您可以使用一个pretrained网络和适应您自己的数据。为例展示如何使用转移学习再教育卷积神经网络分类一套新的图片,明白了火车深入学习网络对新图像进行分类。或者,您可以创建和培训网络从头开始使用layerGraph的对象trainNetworktrainingOptions功能。

如果trainingOptions功能不提供训练选项,你需要你的任务,你可以创建一个自定义训练循环使用自动分化。欲了解更多,请看为自定义训练循环定义深度学习网络

例子

(日元…,即)= dlfeval (有趣的,x1,…, xn)评估深度学习数组函数有趣的在输入参数x1,…, xn。函数传递给dlfeval可以包含调用dlgradient从输入,计算梯度x1,…, xn通过使用自动分化。

例子

全部折叠

。函数是一个标准测试函数的优化。的rosenbrock.mhelper函数计算函数值,使用自动微分法计算其梯度。

类型rosenbrock.m
函数[y,就要]=。(x) y = 100 * (x - x (1) (2)。^ 2)。^ 2 + (1 - x (1)) ^ 2;就要= dlgradient (y、x);结束

评估。函数及其梯度的点[1,2],创建一个dlarray的点,然后调用dlfeval在功能上处理@rosenbrock

x0 = dlarray ([1, 2]);[fval, gradval] = dlfeval (x0 @rosenbrock)
fval = 1 x1 dlarray 104
gradval = 1 x2 dlarray 396 200

定义。海涅的函数是一个函数的两个输入,x1和x2

类型rosenbrock2.m
函数[y, dydx1, dydx2] = rosenbrock2 (x1, x2) y = 100 * (x2 - x1。^ 2)。^ 2 + (1 - x1)。^ 2;[dydx1, dydx2] = dlgradient (y, x1, x2);结束

调用dlfeval评估rosenbrock2在两个dlarray表示输入的参数12

x1 = dlarray (1);x2 = dlarray (2);[fval, dydx1 dydx2] = dlfeval (@rosenbrock2 (x1, x2)
fval = 1 x1 dlarray 104
dydx1 = 1 x1 dlarray 396
dydx2 = 1 x1 dlarray 200

情节。海涅的函数的梯度几个点在单位正方形。首先,初始化数组代表函数的评估点和输出。

(X1, X2)) = meshgrid (linspace (0, 1, 10));X1 = dlarray (X1 (:));X2 = dlarray (X2 (:));Y = dlarray(0(大小(X1)));DYDX1 = Y;DYDX2 = Y;

评价函数在一个循环中。阴谋的结果使用箭袋

i = 1:长度(X1) [Y (i), DYDX1(我),DYDX2 (i)) = dlfeval (@rosenbrock2, X1 (i), X2(我));结束箭袋(extractdata (X1)、extractdata (X2)、extractdata (DYDX1) extractdata (DYDX2))包含(x1的)ylabel (“x2”)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象颤。

使用dlgradientdlfeval计算值和梯度的函数,包括复数。你可以计算复杂的梯度,或限制梯度实数。

定义的函数complexFun年底上市,这个例子。这个函数实现了复杂的公式如下:

f ( x ) = ( 2 + 3 ) x

定义的函数gradFun年底上市,这个例子。这个函数调用complexFun并使用dlgradient计算结果的梯度对输入。自动分化,分化——即价值。,the value of the function calculated from the input — must be a real scalar, so the function takes the sum of the real part of the result before calculating the gradient. The function returns the real part of the function value and the gradient, which can be complex.

定义的采样点之间的复平面2和2和2 和2 和转换dlarray

functionRes = linspace (2100);x = functionRes + 1 * functionRes。”;x = dlarray (x);

在每个采样点计算函数值和梯度。

[y,毕业生]= dlfeval (@gradFun x);y = extractdata (y);

定义要显示的采样点的梯度。

gradientRes = linspace (2, 2, 11);xGrad = gradientRes + 1我* gradientRes。”;

提取这些采样点的梯度值。

[~,gradPlot] = dlfeval (@gradFun dlarray (xGrad));gradPlot = extractdata (gradPlot);

策划的结果。使用显示亮度图像显示的值函数在复平面。使用箭袋梯度的方向和大小。

显示亮度图像((2,2),(2,2),y);轴xycolorbar举行箭袋(真实(xGrad),图像放大(xGrad),真正的(gradPlot),图像放大(gradPlot),“k”);包含(“真正的”)ylabel (“虚”)标题(“真正的价值和梯度”,“Re (f (x)) =美元是美元((2 + 3)x) $”,“翻译”,“乳胶”)

图包含一个坐标轴对象。坐标轴对象2标题真正价值和梯度包含对象类型的形象,颤。

函数的梯度是相同的在整个复杂的飞机。提取的值自动differentation梯度计算。

研究生(1,1)
我答= 1 x1 dlarray 2.0000 - 3.0000

通过检查,复杂的函数的导数值

df ( x ) dx = 2 + 3

然而,函数是( f ( x ) )不是分析,因此没有复杂的导数的定义。自动分化在MATLAB中,区分价值必须是真实的,因此不能复解析函数。相反,计算导数,这样返回的梯度点速上升的方向,见图。这是通过重新解释功能 ( f ( x ) ) :C R作为再保险函数 ( f ( x R + x ) ) :R × R R

函数y = complexFun (x) y = x (2 + 3) *;结束函数[y,毕业生]= gradFun (x) y = complexFun (x);y =真正的(y);研究生= dlgradient(总和(y,“所有”),x);结束

输入参数

全部折叠

函数来评估,指定为一个函数处理。如果有趣的包括一个dlgradient电话,然后dlfeval计算梯度通过使用自动分化。在这种梯度评价,每个论点的dlgradient电话必须是一个dlarray或一个细胞数组、结构或包含一个表dlarray。输入参数的数量dlfeval必须输入参数的数量一样吗有趣的

例子:@rosenbrock

数据类型:function_handle

函数参数,指定为任何类型或MATLAB数据dlnetwork对象。

一个输入参数xj这是一个变量的分化dlgradient电话必须是追踪dlarray或单元阵列结构,或表包含一个跟踪dlarray。一个额外的变量如hyperparameter或常量数组不需要的数据dlarray

评估深度学习梯度,您可以提供一个dlnetwork对象作为函数参数和评估网络的传球前进有趣的

例子:dlarray ([1 2; 3 4])

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|字符串|结构体||细胞|function_handle|分类|datetime|持续时间|calendarDuration|fi
复数的支持:金宝app是的

输出参数

全部折叠

输出函数,返回任何数据类型。如果输出结果dlgradient电话,输出是一个dlarray

提示

扩展功能

介绍了R2019b