ROS研究员 2024-03-16 23:57 采纳率: 35.7%
浏览 28

训练集意外中断在训练

训练自己的训练集中间中断了,在使用代码python mytrain.py --epochs 2000 --resume runs/train/exp9/weights/last.pt
训练显示
AssertionError: runs\train\exp9\weights\last.pt training to 2000 epochs is finished, nothing to resume.
Start a new training without --resume, i.e. 'python train.py --weights runs\train\exp9\weights\last.pt'
可是并没有训练完只训练了400多次

img

img

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-16 23:57
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 在训练自己的训练集时,中间中断了,然后使用命令“python mytrain.py --epochs 2000 --resume runs/train/exp9/weights/last.pt”恢复训练,但是出现了错误信息:AssertionError: runs\train\exp9\weights\last.pt training to 2000 epochs is finished, nothing to resume. 提示已经完成训练2000轮,无需恢复训练,而实际上只训练了400多轮。 解决方案: 该问题的原因是自己在训练时中断了训练,而并没有重新保存模型参数,导致在恢复训练时出现了错误信息。因此,需要重新训练模型,并保存模型参数。 正确的命令应该是“python mytrain.py --epochs 2000 --weights runs/train/exp9/weights/last.pt”,即不使用--resume参数,手动指定模型参数的路径,而不是使用--resume参数自动获取参数路径。 代码示例:
    import torch
    from torch.utils.data import DataLoader
    from torch.optim import Adam
    def train_model(dataset, model, device='cuda'):
        train_loader = DataLoader(dataset, batch_size=32, shuffle=True)
        optimizer = Adam(model.parameters(), lr=1e-3)
        criterion = torch.nn.CrossEntropyLoss()
        # 加载预训练模型路径
        pretrained_path = 'runs/train/exp9/weights/last.pt'
        if pretrained_path:
            state_dict = torch.load(pretrained_path, map_location=device)
            model.load_state_dict(state_dict)
        # 训练模型
        model.to(device)
        for epoch in range(1, 2001):
            model.train()
            for idx, (inputs, labels) in enumerate(train_loader):
                inputs = inputs.to(device)
                labels = labels.to(device)
                optimizer.zero_grad()
                outputs = model(inputs)
                loss = criterion(outputs, labels)
                loss.backward()
                optimizer.step()
                if idx % 50 == 0:
                    print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(
                        epoch, 2000, idx, len(train_loader), loss.item()))
            if epoch % 100 == 0:
                # 保存模型参数
                save_path = 'runs/train/exp9/weights/last.pt'
                torch.save(model.state_dict(), save_path)
    if __name__ == '__main__':
        # 加载数据集和模型
        dataset = MyDataset()
        model = MyModel()
        # 训练模型
        train_model(dataset, model)
    

    在训练模型时,需要手动指定预训练模型的路径,并在每轮训练后保存模型参数。这样就可以避免训练过程中中断时导致参数无法恢复的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月16日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价