我可以扩展和改进神经网络模型而无需从头开始重新训练吗?

问题描述 投票:0回答:1

假设我已经训练了一个神经网络,用于使用 MNIST 数据集对数字进行分类。如果我也想能够识别字符“A”,我可以以某种方式利用已经训练好的神经网络吗?新模型最终应该能够区分:“0-1-2-3-4-5-6-7-8-9-A”

我猜我需要更改神经网络,以便它在输出层中容纳额外的可能输出。

我在想也许我可以使用初始模型中获得的权重作为新模型中相应权重的起始值。这有什么用吗?或者我从头开始一个新模型会更好吗?

我知道 Mnist 并不是一个真正大的数据集,重新开始也没什么大不了的,但我认为这个问题仍然很有趣,并且在处理更大的数据集或更复杂的系统时会变得更加相关。

谢谢!

machine-learning neural-network classification mnist
1个回答
0
投票

这个过程称为微调 为此,您需要:

  1. 找到您想要微调的架构(最好使用torch.models
  2. 打印模型以查看其架构
  3. 通常火炬模型的最后一层称为
    fc
    ,它是与
    out_size == amount_of_classes
    完全连接的层,您需要用您自己的层替换这个fc层(在您的示例中它将是具有11个输出的层)。
  4. 之后你需要冻结模型大部分的权重(因为 MNIST 是非常小的数据集,大模型不能很好地拟合它,如果数据集更大,你可以冻结更少的权重)。要冻结权重,您必须迭代各层并编写类似
    layer.params.requires_grad = False
  5. 的内容
  6. 之后,您需要像平常一样训练模型(火炬闪电或手动)。

一般来说,微调是非常流行的做法,它有助于减少在装配上花费的时间

© www.soinside.com 2019 - 2024. All rights reserved.