[深度学习] inplace operation 的错误 -> 训练模型方向导致

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

项目场景

在深度学习的时候项目需要用到拮抗网络的知识 就按照文字上的要求进行建模结果发生了Inplace operation
研究了半天也不知道Inplace 到底在哪里, 后来终于发现了原因所以赶紧记下来。

Created with Raphaël 2.3.0 o encoder classifier w

问题描述

训练的时候, 我们需要先训练特征提取再训练分类器但是由于项目用到了GAN也就是advesarial learning, 即加入“噪音”之后需要再次训练encoder 让他可以在Domain变化的情况下分不清图片来自于哪个domain以实现Domain invariance。

所以我们一开始的想法就是先去训练classifier 等他训练好了冻住它的所有参数再去训练encoder ,结果就发生了inplace operation的报错


原因分析

后来发现这其实是反向传播的问题
如果先训练B 再训练A 的话 就会发生Inplace operation 的错误因为先训练B反向传播进行计算他会计算这一条链直到一开始o的梯度并且进行保存。之后A 进行反向传播的时候那肯定会更新梯度但是一更新由于pythone 用的是Inplace operartion 那B的参数也会受到影响。 即使冻住了B 也没有用。冻住只是不再计算但是这个问题是之前存储需要输出的值变化了 所以就会报错

但是如果先A 再B 就没有问题因为A 先反向传播参数进行计算更新B再计算就直接用这些再计算A 时已经存好的值这样B的更新也不会影响到A 的参数变化


解决方案

先train A 再 train B,

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6