如何在Pytorch网络上进行微调

我正在使用Pytorch中的这个SegNet实现,并希望对其进行微调。我在网上查阅了一些资料,发现了这种方法(基本思想是冻结网络中除了最后一层之外的所有层)。我的问题是SegNet有超过100层,我希望找到一种更简单的方法来实现,而不想编写100行代码。

你认为这个方法可行吗?还是完全行不通?

import torch.optim as optimmodel = SegNet()for name, param in model.named_modules():    if name != 'conv11d':    # 最后一层应该保持活跃        param.requires_grad = Falseoptimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)def train():    ...

我如何检查这个方法是否按预期工作?


回答:

这个过程称为微调,将requires_grad设置为False是实现微调的好方法。根据pytorch文档

每个Tensor都有一个标志:requires_grad,它允许对子图进行细粒度的排除,以提高计算效率。

如果一个操作有一个需要梯度的输入,那么它的输出也将需要梯度。相反,只有当所有输入都不需要梯度时,输出才不需要梯度。在所有Tensor都不需要梯度的情况下,子图中永远不会执行反向计算。

请参阅这个pytorch教程以获取相关示例。

检查这种方法是否工作的一个简单方法是查看初始错误率。假设任务与网络最初训练的任务相似,那么错误率应该远低于随机初始化的网络。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注