主要内容

train

(即将删除)训练浅层神经网络

以后的版本中将会删除 train。有关详细信息,请参阅Transition Legacy Neural Network Code to dlnetwork Workflows

有关更新代码的建议,请参阅版本历史记录

说明

此函数训练一个浅层神经网络。对于训练深度学习网络(如卷积网络或 LSTM 网络),请使用 trainnet 函数。

trainedNet = train(net,X,T,Xi,Ai,EW) 根据 net.trainFcnnet.trainParam 训练网络 net

示例

[trainedNet,tr] = train(net,X,T,Xi,Ai,EW) 还返回训练记录。

[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,'*')

输入参数

全部折叠

输入网络,指定为 network 对象。要创建 network 对象,请使用 feedforwardnetnarxnet 等函数。

网络输入,指定为 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 不会使用该列进行训练、测试或验证。

网络目标,指定为 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 是可选项,只有在要求目标的网络中才会用到。

注意

目标 T 中的任何 NaN 值都将被视为缺失数据。如果 T 的元素是 NaN,则该元素不会用于训练、测试或验证。

初始输入延迟条件,指定为 Ni×ID 元胞数组或 R×(ID*Q) 矩阵,其中

  • ID = net.numInputDelays

  • Ni = net.numInputs

  • R 是输入大小

  • Q 是批量大小

对于元胞数组输入,Xi 的列按最早延迟条件到最近延迟条件排序:Xi{i,k} 是在时间 ts = k - ID 处的输入 i

Xi 也是可选项,只有在有输入或层延迟的网络中会用到。

初始层延迟条件,指定为 Nl×LD 元胞数组或 (Si 之和)×(LD*Q) 矩阵,其中

  • Nl = net.numLayers

  • LD = net.numLayerDelays

  • Si = net.layers{i}.size

  • Q 是批量大小

对于元胞数组输入,Ai 的列按最早延迟条件到最近延迟条件排序:Ai{i,k} 是在时间 ts = k - LD 处的层输出 i

误差权重,指定为 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,而不是全部 NoTSUiQ 或其中任意一项。在这种情况下,EW 会自动扩展维度以匹配目标 T。这允许轻松地对任何维度(例如每个样本)的重要性进行加权,同时对另一个维度(例如时间,使用 TS=1)具有相同的重要性。如果所有维度均为 1(例如,如果 EW = {1}),则所有目标值都被视为具有相同的重要性。这是 EW 的默认值。

如上所述,误差权重 EW 可以与目标 T 具有相同的维度,或有一些维度设置为 1。例如,如果 EW 为 1×Q,则目标样本将具有不同重要性,但样本中的每个元素将具有相同的重要性。如果 EW 为 (Ui 之和)×1,则每个输出元素具有不同重要性,而所有样本将被视为具有相同的重要性。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'useParallel','yes'

用于指定并行计算的选项,指定为 'yes''no'

  • 'no' - 计算在普通 MATLAB 线程上进行。这是默认 'useParallel' 设置。

  • 'yes' - 如果并行池处于打开状态,计算将在并行工作单元上进行。如果没有并行池处于打开状态,软件将使用默认集群配置文件启动一个并行池。

用于指定 GPU 计算的选项,指定为 'yes''no''only'

  • 'no' - 计算在 CPU 上进行。这是默认 'useGPU' 设置。

  • 'yes' - 如果当前 gpuDevice 是受支持的 GPU,则在其上进行计算(请参阅 Parallel Computing Toolbox™ 了解 GPU 要求)。如果当前 gpuDevice 不受支持,则计算仍在 CPU 上进行。如果 'useParallel' 也是 'yes',并且并行池处于打开状态,则每个具有独占 GPU 的工作单元都会使用该 GPU,其他工作单元则在其各自的 CPU 内核上运行计算。

  • 'only' - 如果没有并行池处于打开状态,则此设置与 'yes' 相同。如果有并行池处于打开状态,则仅使用具有独占 GPU 的工作单元。但是,如果一个并行池处于打开状态但没有可用的受支持 GPU,则计算仍会在所有工作单元 CPU 上执行。

用于显示资源的选项,指定为 'yes''no'

  • 'no' - 在命令行中不显示使用的计算资源。这是默认设置。

  • 'yes' - 在命令行中显示实际使用的计算资源的摘要。如果请求了并行或 GPU 计算,但并行池未打开或受支持的 GPU 不可用,则实际资源可能与请求的资源不同。使用并行工作单元时,系统会描述每个工作单元的计算模式,包括池中未使用的工作单元。

减少内存使用量,指定为正整数。

对于大多数神经网络,默认 CPU 训练计算模式是一个已编译的 MEX 算法。但是,对于大型网络,计算可能采用一种 MATLAB® 计算模式。这可以使用 'showResources' 来确认。如果使用的是 MATLAB 而且内存并不充裕,则将 reduction 选项设置为大于 1 的值 N 会将训练所需的大量临时存储使用量减少至 N 分之一,不过这会增加训练时间。

检查点文件,指定为字符向量。

'CheckpointFile' 的值可以设置为保存在当前工作文件夹中的文件名、另一个文件夹中的文件路径,或设置为空字符串以禁用检查点保存(默认值)。

检查点延迟,指定为非负整数。

可选参数 'CheckpointDelay' 用于限制保存的频率。限制检查点的频率可以提高效率,因为与花在计算上的时间相比,它可以减少保存检查点所花费的时间。其默认值为 60,这意味着每分钟最多保存一次检查点。如果您希望每轮训练只保存一次检查点,请将 'CheckpointDelay' 的值设置为 0。

输出参量

全部折叠

经过训练的网络,以 network 对象形式返回。

训练记录(epochperf),以结构体形式返回,其字段取决于网络训练函数 (net.NET.trainFcn)。它可以包括如下字段:

  • 训练、数据划分以及性能函数和参数

  • 训练、验证和测试集的数据划分索引

  • 训练、验证和测试集的数据划分掩码

  • 轮数 (num_epochs) 和最佳轮次 (best_epoch)

  • 训练状态名称列表 (states)

  • 每个状态名称的字段(在整个训练过程中记录其值)

  • 在每轮训练评估的网络最优性能:基于训练集的最优性能 (best_perf),基于验证集的最优性能 (best_vperf),基于测试集的最优性能 (best_tperf)

算法

train 使用由 net.trainParam 指示的训练参数值调用由 net.trainFcn 指示的函数。

通常,一轮训练定义为向网络呈现所有输入向量一次。然后,系统会根据所有这些呈现所得的结果更新网络。

训练会一直持续,直到达到最大轮数、满足性能目标或发生 net.trainFcn 函数的任何其他停止条件。

有些训练函数并不遵循这一标准,而只是在每轮训练中呈现一个输入向量(或序列)。从并发输入向量(或序列)中为每轮训练随机选择一个输入向量(或序列)。competlayer 返回使用 trainru(执行此操作的训练函数)的网络。

版本历史记录

在 R2006a 之前推出

全部折叠