主要内容

dlarray

R2026b

用于自定义的深度学习数组

描述

深度学习数组使用可选的数据格式标签存储数据,以用于自定义训练循环,并通过自动微分使函数能够计算和使用导数。

提示

对于大多数深度学习任务,您可以使用预训练神经网络,并使其适应您自己的数据。有关说明如何使用迁移学习来重新训练卷积神经网络以对一组新图像进行分类的示例,请参阅重新训练神经网络以对新图像进行分类。您也可以使用 trainnet 和 trainingOptions 函数从头创建和训练神经网络。

如果 trainingOptions 函数没有提供您的任务所需的训练选项,则您可以使用自动微分创建自定义训练循环。要了解详细信息,请参阅使用自定义训练循环训练网络。

如果 trainnet 函数没有提供您的任务所需的损失函数,您可以将 trainnet 的自定义损失函数指定为函数句柄。对于需要比预测值和目标值更多输入的损失函数(例如,需要访问神经网络或额外输入的损失函数),请使用自定义训练循环来训练模型。要了解详细信息,请参阅使用自定义训练循环训练网络。

如果 Deep Learning Toolbox™ 没有提供您的任务所需的层,则您可以创建一个自定义层。要了解详细信息,请参阅定义自定义深度学习层。对于无法指定为由层组成的网络的模型,可以将模型定义为函数。要了解详细信息,请参阅Train Network Using Model Function。

有关对哪项任务使用哪种训练方法的详细信息,请参阅Train Deep Learning Model in MATLAB。

创建对象

描述

dlX = dlarray(X) 返回一个表示 X 的 dlarray 对象。如果 X 是 dlarray 对象,则 dlX 是 X 的副本。

示例

dlX = dlarray(X,fmt) 根据 fmt 中的数据格式,使用维度标签对 dlX 中的数据进行格式化处理。维度标签有助于在函数之间传递深度学习数据。有关维度标签的详细信息,请参阅深度学习数据格式。

将 fmt 设置为 "" 不会删除数据中的格式。请改用 stripdims。

示例

dlX = dlarray(v,dim) 接受向量 v 和单精度字符格式 dim,并返回列向量 dlarray。dlX 的第一个维度具有维度标签 dim,第二个(单一)维度具有维度标签 'U'。

示例

输入参量

全部展开

数据数组,指定为 double 或 single 数据类型的数值数组、logical 数组、gpuArray 对象或 dlarray 对象。X 必须是全数组,而非稀疏数组。

示例: rand(31*23,23)

数据类型: single | double | logical
复数支持: 是

数据格式,指定为字符串标量或字符向量。

如果 fmt 为 "",则 dlX 的格式取决于输入 X:

  • 如果 X 不是格式化的 dlarray 对象,则输出 dlX 不带任何格式。

  • 如果 X 是格式化的 dlarray 对象,则输出 dlX 与 X 具有相同的格式。

警告

将 fmt 设置为 "" 不会删除数据中的格式。请改用 stripdims。

如果 fmt 非空,则字符串中的每个字符必须为以下维度标签之一:

  • "S" - 空间

  • "C" - 通道

  • "B" - 批量

  • "T" - 时间

  • "U" - 未指定

您可以指定多个标注为 "S" 或 "U" 的维度。每个 "C"、"B" 和 "T" 标签最多只能使用一次。该软件忽略第二个维度后的单一尾部 "U" 维度。

当您创建格式化的 dlarray 对象时,软件会自动置换维度,使格式的维度采用以下顺序:

  • "S"

  • "C"

  • "B"

  • "T"

  • "U"

例如,如果您指定 "TCB" 格式(时间、通道、批量),则软件会自动置换维度,使其具有 "CBT" 格式(通道、批量、时间)。

如果 fmt 非空,则其包含的维度标签数必须至少与输入数据的维数相同。如果您指定的维度标签数超过该维数,则 dlarray 会为额外的标签创建空(单一)维度。

下表列出了常见数据类型的推荐数据格式。

数据 示例
形状数据格式
二维图像

h×w×c×n 数值数组,其中 h、w、c 和 n 分别是图像的高度、宽度、通道数和观测值数量。

"SSCB"
三维图像h×w×d×c×n 数值数组,其中 h、w、d、c 和 n 分别是图像的高度、宽度、深度、通道数和图像观测值数量。"SSSCB"
向量序列

c×s×n 矩阵,其中 c 是序列的特征数,s 是序列长度,n 是序列观测值数。

"CTB"
二维图像序列

h×w×c×s×n 数组,其中 h、w 和 c 分别对应于图像的高度、宽度和通道数,s 是序列长度,n 是图像序列观测值数。

"SSCTB"
三维图像序列

h×w×d×c×s×n 数组,其中 h、w、d 和 c 分别对应于图像的高度、宽度、深度和通道数量,s 是序列长度,n 是图像序列观测值数。

"SSSCTB"
特征c×n 数组,其中 c 是特征数量,n 是观测值数量。"CB"

数据向量,指定为双精度或单精度数据类型的数值向量、逻辑向量或 dlarray 向量对象。这里,“向量”表示只有一个非单一维度的任何数组。

示例: rand(100,1)

维度标签,指定为 fmt 允许类型的单字符。

示例: "S"

示例: 'S'

输出参量

全部展开

深度学习数组,以 dlarray 对象形式返回。dlX 支持使用 dlgradient 和 dlfeval 进行自动微分。如果您提供 fmt 参量,则 dlX 会有标签。

  • 如果 X 是数值数组或逻辑数组,则 dlX 会包含其数据,这些数据可能会根据 fmt 中的数据格式重新排序。

  • 如果 X 是 gpuArray,则 dlX 中的数据也在 GPU 上。使用 dlX 的后续计算在 GPU 上执行。

对象函数

dimsdlarray 对象的数据格式
dlgradient使用自动微分计算自定义训练循环的梯度
extractdata从 dlarray 对象提取数据
finddimFind dimensions with specified label
stripdims去除 dlarray 数据格式

dlarray 还允许执行数值、矩阵和其他运算的函数。请参阅List of Functions with dlarray Support中的完整列表。

示例

全部折叠

从矩阵创建未格式化的 dlarray。

X = randn(3,5);
dlX = dlarray(X)
dlX = 
  3×5 dlarray

    0.5377    0.8622   -0.4336    2.7694    0.7254
    1.8339    0.3188    0.3426   -1.3499   -0.0631
   -2.2588   -1.3077    3.5784    3.0349    0.7147

创建数据格式包含维度标签 'S' 和 'C' 的 dlarray。

X = randn(3,5);
dlX = dlarray(X,'SC')
dlX = 
  3(S) × 5(C) dlarray

    0.5377    0.8622   -0.4336    2.7694    0.7254
    1.8339    0.3188    0.3426   -1.3499   -0.0631
   -2.2588   -1.3077    3.5784    3.0349    0.7147

如果您以相反的顺序指定维度标签,则 dlarray 会隐式地对基础数据进行重新排序。

dlX = dlarray(X,'CS')
dlX = 
  5(S) × 3(C) dlarray

    0.5377    1.8339   -2.2588
    0.8622    0.3188   -1.3077
   -0.4336    0.3426    3.5784
    2.7694   -1.3499    3.0349
    0.7254   -0.0631    0.7147

创建第一个维度标签为 'T' 的 dlarray 向量。dlarray 自动创建的第二个维度标签是 'U'。

X = randn(6,1);
dlX = dlarray(X,'T')
dlX = 
  6(T) × 1(U) dlarray

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077

如果您为 X 指定行向量,则 dlarray 会隐式地将结果重新排序为列向量。

X = X';
dlX = dlarray(X,'T')
dlX = 
  6(T) × 1(U) dlarray

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077

详细信息

全部展开

提示

扩展功能

全部展开

版本历史记录

在 R2019b 中推出

全部展开