美文网首页
MDGN遇到的错误

MDGN遇到的错误

作者: 学号叁拾 | 来源:发表于2019-05-27 11:03 被阅读0次
    image.png

    进入到net之中之后,处理图像总是会遇到奇奇怪怪的问题
    因为loss函数的问题,该loss为了使生成的两个描述细节上不一样的,本来在jupyter notebook上能运行的,搬到程序里面跑就出不来了。

    AssertionError: nn criterions don't compute the gradient w.r.t. targets - please mark these variables as volatile or not requiring gradients
    

    找了资料,说对target.detach(),之后就没有这个错误了。

    image.png
    AttributeError: 'MDGNModel' object has no attribute 'module'
    

    出错误的地方在:我的MDGNModel中:

    loss_dict = dict(zip(net.module.loss_names, losses))
    

    我调用loss的时候参考着源代码写的,对于module没有仔细了解


    image.png

    在M_model中加入了这两句话之后就有了module,没有loss_name了。
    现在把loss函数放在train代码中试试:

    删除了这两行代码,用了最简单的方式:

    real = Variable(data['image']).cuda()
            mdgn1,mdgn2 = netM(real)
    
            upsample = torch.nn.Upsample(scale_factor=8, mode='bilinear')
    
            up1 = upsample(mdgn1)
    
            up2 = upsample(mdgn2)
    
    
            params = list(netM.parameters())
            optimizer = torch.optim.Adam(params, lr=0.0002, betas=(0.9, 0.999))
    
            loss_M_SSIM = -ssim_loss(real, up1) - ssim_loss(real, up2)
    
         
            loss_M_DIS = -criterionDIS(mdgn1.detach(), mdgn2.detach()) * 0.1
    
            loss = loss_M_SSIM + loss_M_DIS
    
            optimizer.zero_grad()
            loss.backward()
    

    其中对DIS求loss的时候总是出错误,改成了detach就可以了。

    5.23号:

    开启保存图像和保存模型之路:


    image.png

    错误代码:

    RuntimeError: can't convert CUDA tensor to numpy (it doesn't support GPU arrays). Use .cpu() to move the tensor to host memory first.
    

    在data之后加入.cpu就可以了
    但是在转入numpy之后依旧不可用,所以转成了tensor。因为我的tensor是四维的,而toPIL的tensor需要三维,所以出现了该错误:

    TypeError: pic should be Tensor or ndarray. Got <class 'torch.cuda.FloatTensor'>.
    

    之后

    up2_tensor = up1_tensor[0]
    

    转换成PIL类型的图像之后,可以直接save。

    5.27号保存模型

    两种办法:

    • 保存模型
      torch.save(net,'net.pkl')
    • 保存网络参数:
      torch.save(net.sate_dict(),'params.pkl')
      torch.save保存成一个序列化字典,可以保存网络,网络参数,优化器参数,最后给定一个PATH,
      torch.load()即可加载模型。

    相关文章

      网友评论

          本文标题:MDGN遇到的错误

          本文链接:https://www.haomeiwen.com/subject/ujqyzqtx.html