Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
我在做Semi-Supervised过程中,需要分别计算
labeled
和unlabeled data
的loss
,但是在多卡分布式过程中,不允许出现同一个model前向两次的情况,会报错(RuntimeError: Expected to mark a variable ready only once. This error is caused by one),因此我们需要将labeled
和unlabeled data
合并在一起前向一次model,然后再把结果拆分出来即可,实现思路如下:
- 合并
labeled
和unlabeled data
; - 输入模型前向传播得到预测结果;
- 再将预测结果分为
labeled
和unlabeled 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.相关推荐
- 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 ...
- 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) 如果 ...
- 使用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. ...
- 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 ...
- 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 ...
- 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 ...
- 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; ...
- pytorch报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x2500 and 3020x1600)
相信同学们在刚接触深度学习的时候老会遇到类似的问题: 这个其实就是卷积层到全连接层之间的参数数量不对应的问题 卷积层的的输出结果是64*2500的矩阵,那么全连接层的第一个第一层的就应该是:2500* ...
- 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/ ...
最新文章
- easyui使用datagrid时列名包含特殊字符导致表头与数据错位的问题
- 需要进一步学习和思考的速度问题
- python的列表元素输出
- 廖雪峰python教程菜鸟变高手_python怎样
- java邮箱_java发送邮件(qq邮箱)
- 音乐 美术 计算机期末考试表,2021东莞中考音乐美术信息技术合格性考试时间安排...
- 人生理解---2、看《程序员年龄增大后的职业出路是什么》有感
- 深度学习数学基础一--最小二乘法
- 《linux核心应用命令速查》连载十一:pstree:显示进程状态树
- redis分布式锁的 5个坑
- HTML特殊字符符号大全
- crypto-js 加密解密 (TS版本)
- 使用fswebcam报错Error selecting input 0 VIDIOC_S_INPUT: Device or resource busy或者使用metion监控,画面为灰色
- 云栖社区订阅周刊大盘点
- 2019年2月1日训练日记
- 卷积神经网络CNN-全连接层
- Zero WL biases read from N-file错误处理
- 基于军事专区新闻的爬虫
- 如何给U盘或移动硬盘分配固定盘符
- [Python基础04]基本数据类型