我在做Semi-Supervised过程中,需要分别计算labeledunlabeled dataloss,但是在多卡分布式过程中,不允许出现同一个model前向两次的情况,会报错(RuntimeError: Expected to mark a variable ready only once. This error is caused by one),因此我们需要将labeledunlabeled data合并在一起前向一次model,然后再把结果拆分出来即可,实现思路如下:

  • 合并labeledunlabeled data
  • 输入模型前向传播得到预测结果;
  • 再将预测结果分为labeledunlabeled data两部分;
  • 分别计算loss即可。
    def foward_student_train(self, sup_data, unsup_data):'''forward student'''# 合并输入datastudent_data, sup_data_length = \self.combine_student_data(sup_data, unsup_data)# 前向传播img_feats, _ = self.student.extract_feat(points=None, img=student_data['img_inputs'], img_metas=student_data['img_metas'])    # bev_feats, Nonestudent_info = self.student.pts_bbox_head(img_feats)# 分开预测结果datatsup_info, unsup_info = self.split_student_data(student_info, sup_data_length)# 计算有监督部分的lossloss_inputs = [sup_data['gt_bboxes_3d'], sup_data['gt_labels_3d'], sup_info]sup_loss = self.student.pts_bbox_head.loss(*loss_inputs)return sup_loss, unsup_info# 合并输入datadef combine_student_data(self, sup_data, unsup_data):'''combine sup and unsup data for student model'''assert isinstance(sup_data, dict) and \isinstance(unsup_data, dict)new_student_data = deepcopy(sup_data)keys = sup_data.keys()for key in keys:if key == 'img_inputs':new_student_data[key] = self.combine_imgs(sup_data[key], unsup_data[key])else:new_student_data[key] = sup_data[key] + \unsup_data[key]return new_student_data, (len(sup_data['img_metas']), len(unsup_data['img_metas']))# 分开预测结果datadef split_student_data(self, student_data, student_data_length):sup_data, unsup_data = [], []for idx, data in enumerate(student_data):   # len(list) = 6sup_data.append([{}])unsup_data.append([{}])# 默认len(list) = 1for key in data[0].keys():sup_data[idx][0][key] = data[0][key][:student_data_length[0], ...].clone()# detach upservised data gradientunsup_data[idx][0][key] = data[0][key][student_data_length[0]:, ...].clone()return tuple(sup_data), tuple(unsup_data)

Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.相关推荐

  1. RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.

    1. 问题背景 今天在浏览一些代码的时候,总是出现了以下的错误描述 RuntimeError: Output 0 of SelectBackward is a view and is being mo ...

  2. RuntimeError: Output 0 of UnbindBackward is a view and is being modified inplace.

    1. 问题描述: 在使用utils中的make_grid函数时 utils.make_grid(fmap, normalize=True, scale_each=True, nrow=nrow) 如果 ...

  3. 使用tensorboard遇到:Output 0 of UnbindBackward is a view and is being modified inplace.....

    使用tensorboad时遇到问题: RuntimeError: Output 0 of UnbindBackward is a view and is being modified inplace. ...

  4. Output 0 of UnbindBackward is a view and is being modified inplace

    出错原因,参考:https://blog.csdn.net/pearl8899/article/details/112185772. 对于torch1.7,问题发生在utils.py,make_gri ...

  5. PyTorch报错:RuntimeError: CUDA error: device-side assert triggered at /pytorch/aten/src/THC/generic

    训练模型报错 RuntimeError: cuda runtime error (710) : device-side assert triggered at /pytorch/aten/src/TH ...

  6. Redis报错解决:RDB: 0 MB of memory used by copy-on-write

    我在使用Redis的时候报错如下: 2225:M 06 May 12:01:45.066 * 10 changes in 300 seconds. Saving... 32225:M 06 May 1 ...

  7. Pytorch——报错解决:TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, found

    报错信息 TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; ...

  8. pytorch报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x2500 and 3020x1600)

    相信同学们在刚接触深度学习的时候老会遇到类似的问题: 这个其实就是卷积层到全连接层之间的参数数量不对应的问题 卷积层的的输出结果是64*2500的矩阵,那么全连接层的第一个第一层的就应该是:2500* ...

  9. PyTorch报错“/.../Loss.cu: ... [59,0,0] Assertion input_val >= zero input_val <= one failed.”

    1 问题描述 今天在调试代码的时候,出现这样一个错误: PyTorch Assertion: /opt/conda/conda-bld/pytorch_1640811803361/work/aten/ ...

最新文章

  1. easyui使用datagrid时列名包含特殊字符导致表头与数据错位的问题
  2. 需要进一步学习和思考的速度问题
  3. python的列表元素输出
  4. 廖雪峰python教程菜鸟变高手_python怎样
  5. java邮箱_java发送邮件(qq邮箱)
  6. 音乐 美术 计算机期末考试表,2021东莞中考音乐美术信息技术合格性考试时间安排...
  7. 人生理解---2、看《程序员年龄增大后的职业出路是什么》有感
  8. 深度学习数学基础一--最小二乘法
  9. 《linux核心应用命令速查》连载十一:pstree:显示进程状态树
  10. redis分布式锁的 5个坑
  11. HTML特殊字符符号大全
  12. crypto-js 加密解密 (TS版本)
  13. 使用fswebcam报错Error selecting input 0 VIDIOC_S_INPUT: Device or resource busy或者使用metion监控,画面为灰色
  14. 云栖社区订阅周刊大盘点
  15. 2019年2月1日训练日记
  16. 卷积神经网络CNN-全连接层
  17. Zero WL biases read from N-file错误处理
  18. 基于军事专区新闻的爬虫
  19. 如何给U盘或移动硬盘分配固定盘符
  20. [Python基础04]基本数据类型

热门文章

  1. linux+显卡驱动下载官网下载地址,下载:NVIDIA显卡Linux驱动256.44正式版
  2. 记一次perl使用lwp获取结果为乱码
  3. u盘win7纯净版_U盘PE启动安装Win7系统教程(微PE版)
  4. 关于计算机的英语笑话,最经典的英语笑话,戳中你的笑点了吗?
  5. 计算机英语趣味知识,看段子,学英语,懂点计算机知识才能看懂哦!
  6. 生成自己的浏览器证书
  7. Golang入门之——文件锁操作flock
  8. github如何写博客
  9. linux下redis设置密码登录(简单易懂)
  10. 阿里云认证有什么用?考试费用高不高?