训练深度学习模型MATLAB
您可以以各种方式训练和定制一个深度学习模型——例如,您可以用新数据重新训练一个预先训练过的模型(迁移学习),从头训练一个网络,或者将一个深度学习模型定义为一个函数并使用定制的训练循环。使用这个流程图来选择最适合你的任务的训练方法。
提示
有关计算机视觉工作流程的信息,包括物体检测,请参见深度学习的计算机视觉.有关从TensorFlow™-Keras、Caffe和ONNX™(开放神经网络交换)模型格式导入网络和网络架构的信息,请参见深度学习导入和导出.
训练方法
该表提供了不同的培训方法的信息。
方法 | 更多的信息 |
---|---|
直接使用网络 | 如果预先训练过的网络已经执行了所需的任务,则不需要重新训练网络。相反,您可以通过使用 示例请参见使用GoogLeNet对图像进行分类. |
列车网络使用trainingOptions 而且trainNetwork |
如果网络指定为层数组或层图,则 有关如何重新训练网络的示例(迁移学习),请参见训练深度学习网络对新图像进行分类.有关如何从零开始训练网络的示例,请参见创建简单的深度学习网络分类. |
列车网络使用dlnetwork 对象和自定义训练循环 |
方法可以控制训练算法细节 对于不能使用输出层指定的损耗函数,可以在自定义训练循环中指定损耗。 有关演示如何使用自定义学习速率计划训练网络的示例,请参见使用自定义训练循环训练网络. 多学,多见定义自定义训练循环,损失函数和网络. |
使用模型函数和自定义训练循环训练网络 | 对于不能使用层图创建的网络,可以将自定义网络定义为函数。有关演示如何训练定义为函数的深度学习模型的示例,请参见利用模型函数的列车网络. 如果您可以使用层图创建网络的部分,那么您可以将这些部分定义为层图,并使用模型函数将不支持的部分定义为层图。 |
决定
该表提供了关于流程图中每个决策的更多信息。
决定 | 更多的信息 |
---|---|
深度学习工具箱™是否提供了一个合适的预训练网络? | 对于大多数任务,您可以使用或重新训练预先训练过的网络,例如 用于MATLAB中预训练深度学习网络的列表®,请参阅预训练深度神经网络.您可以使用预先训练的网络直接与新数据,或者您可以使用新数据重新训练它们使用迁移学习不同的任务。 |
你能不用再培训就使用网络吗? | 如果预先训练过的网络已经执行了您需要的任务,那么您可以直接使用该网络,而无需再训练。例如,您可以使用 如果您需要重新训练网络—例如,对一组不同的类进行分类—那么您可以使用迁移学习来重新训练网络。 |
你能将模型定义为一个层数组或图形吗? | 您可以将大多数深度学习模型指定为层数组或层图。换句话说,您可以将模型定义为一组层,其中层输出连接到其他层输入。 有些网络架构不能定义为层图。例如,Siamese网络需要权值共享,不能定义为层图。对于这些网络,必须将模型定义为函数。示例请参见利用模型函数的列车网络. |
网络是否只有一个输出? | 对于具有多个输出的网络,必须使用自定义训练循环来训练网络。示例请参见多输出训练网络. |
“深度学习工具箱”是否提供了您需要的中间层? | “深度学习工具箱”为深度学习任务提供了许多不同的层。有关层的列表,请参见深度学习层列表. 如果深度学习工具箱提供所需的中间层(网络中间的层),则可以使用这些层将网络定义为层数组或层图。否则,尝试将任何不支持的层定义为自定义层。有关更多信息,请参见定义自定义深度学习层. |
能否将不支持的中间层定义为自定义层? | 如果“深度学习工具箱”没有提供所需的层,则可以尝试定义自定义深度学习层。有关更多信息,请参见定义自定义深度学习层. 如果你可以为任何不支持的层定义自定义层,那么你可以在层数组或层图中包含这些自定义层。否则,使用函数指定深度学习模型,并使用自定义训练循环训练模型。示例请参见利用模型函数的列车网络. |
“深度学习工具箱”是否提供您需要的输出层? | 输出层指定用于训练的损耗函数。“深度学习工具箱”为深度学习任务提供了不同的输出层。例如, 如果“深度学习工具箱”提供所需的输出层,则可以使用这些层定义层图。否则,尝试将任何不支持的输出层定义为自定义层。有关更多信息,请参见定义自定义深度学习层. |
您可以将不支持的输出层定义为自定义层吗? | 如果“深度学习工具箱”没有提供所需的输出层,则可以尝试定义一个自定义输出层。有关更多信息,请参见定义自定义深度学习层. 如果您可以为任何不支持的输出层定义一个自定义输出层,那么您可以将这些自定义层包含在层数组或层图中。否则,训练模型使用 |
是否trainingOptions 函数提供所需的选项? |
的 如果 |