MDGN遇到的错误

2019-05-27  本文已影响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号保存模型

两种办法:

上一篇 下一篇

猜你喜欢

热点阅读