首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么yolo4火把再训练的损失似乎像第一次训练一样高?

为什么yolo4火把再训练的损失似乎像第一次训练一样高?
EN

Data Science用户
提问于 2020-08-28 16:00:17
回答 1查看 170关注 0票数 2

我在google中通过克隆git克隆yolo4 https://github.com/roboflow-ai/pytorch-YOLOv4.git建立了一个git pytorch框架。

我通过训练创造了检查点。由于我们需要更强大的训练模型,我再次给训练分配预先训练的检查点,但损失似乎像第一次训练一样具有很高的价值。

代码是用于培训!python train.py -b 2 -s 1 -l 0.001 -g 0 -pretrained ./Yolov4_epoch100_latest.pth -classes 1 -dir ./train -epochs 100的。

不确定我的预先训练的检查点是否被用于2端训练?如果使用它,那么为什么第二次在开始训练时损失的价值似乎像第一次训练一样高?如果你有任何想法,请分享你的想法。

EN

回答 1

Data Science用户

发布于 2020-12-15 20:52:56

显然,只更新了预训练模型的较低层权重。若要更改它,请打开models.py并向下滚动到Yolov4的类定义。正如人们所看到的,只有1-下降5和脖子层是更新的预先训练的模型重量,而头部是开始新的。应该将此代码部分更改为类似于:

代码语言:javascript
运行
复制
if yolov4conv137weight:
        self.neck = Neck()
        **self.head = Yolov4Head(output_ch)**
        _model = nn.Sequential(self.down1, self.down2, self.down3, self.down4, self.down5, self.neck, **self.head**)
        pretrained_dict = torch.load(yolov4conv137weight)

        model_dict = _model.state_dict()
        # 1. filter out unnecessary keys
        pretrained_dict = {k1: v for (k, v), k1 in zip(pretrained_dict.items(), model_dict)}
        # 2. overwrite entries in the existing state dict
        #print("update weights")
        model_dict.update(pretrained_dict)
        _model.load_state_dict(model_dict)
    # head
    **else:
        self.head = Yolov4Head(output_ch)**

再次运行,并观察预期的损失(希望)。祝好运!

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/80944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档