日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

conv2d() received an invalid combination of arguments问题解决

發(fā)布時(shí)間:2023/12/16 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 conv2d() received an invalid combination of arguments问题解决 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在學(xué)習(xí)動(dòng)手學(xué)深度學(xué)習(xí)風(fēng)格遷移這一部分的時(shí)候,程序運(yùn)行的時(shí)候抱錯(cuò):conv2d() received an invalid combination of arguments

具體來說,先使用函數(shù)SynthesizedImage定義一個(gè)圖像,它的權(quán)重是更新的目標(biāo),經(jīng)get_inits實(shí)例化,通過訓(xùn)練更新圖像的權(quán)重,獲得風(fēng)格遷移后的圖像。

class SynthesizedImage(nn.Module):def __init__(self, img_shape, **kwargs):super(SynthesizedImage, self).__init__(**kwargs)self.weight = nn.Parameter(torch.rand(*img_shape))def forward(self):return self.weightdef get_inits(content_img, lr, lr_decay_epoch, init_random):gen_img = SynthesizedImage(content_img.shape).to(device)if not init_random: gen_img.weight.data.copy_(content_img.data)optimizer = torch.optim.Adam(gen_img.parameters(), lr=lr)scheduler = torch.optim.lr_scheduler.StepLR(optimizer, lr_decay_epoch, 0.8)return gen_img(), optimizer, scheduler

參考:在python中遇到的錯(cuò)誤(二):用pytorch的CNN發(fā)生的報(bào)錯(cuò)_游魚不知夏的博客-CSDN博客

發(fā)現(xiàn)可能是初始化數(shù)據(jù)出了問題。經(jīng)過檢查發(fā)現(xiàn)函數(shù)get_inits返回值寫成了是gen_img,它的格式是:

<class '__main__.SynthesizedImage'>

返回的參數(shù)應(yīng)該寫成gen_img(),返回后的格式是:

<class 'torch.nn.parameter.Parameter'>

這樣就不會(huì)報(bào)錯(cuò)了。

這里蘊(yùn)含一個(gè)知識(shí)點(diǎn):pytorch模型定義。下面舉幾個(gè)例子就能明白,為什么gen_img的格式是<class '__main__.SynthesizedImage'>, gen_img()的格式是<class 'torch.nn.parameter.Parameter'>

簡(jiǎn)單地說,就是將模型實(shí)例化之后,gen_img代表模型自身,gen_img()執(zhí)行了魔法函數(shù)forward(),得到forward()的返回值

第一個(gè)例子

class Net1(nn.Module):def __init__(self, img_shape, **kwargs):super(Net1, self).__init__(**kwargs)self.weight = nn.Parameter(torch.rand(*img_shape))def forward(self):return self.weightmodel = Net1([2,3])

>>print(model)

Net1()

>>print(model())

Parameter containing: tensor([[0.6031, 0.3673, 0.7362],[0.9071, 0.1086, 0.0191]], requires_grad=True)

>>print(type(model))

<class '__main__.Net1'>

>>print(type(model()))

<class 'torch.nn.parameter.Parameter'>

第二個(gè)例子

class Net2(nn.Module):def __init__(self, a):super(Net2, self).__init__()self.conv1 = nn.Conv2d(3, 5, 3)def forward(self, x): return self.conv1model = Net2(1)

>>print(model)

Net2((conv1): Conv2d(3, 5, kernel_size=(3, 3), stride=(1, 1)) )

>>print(model(1))

Conv2d(3, 5, kernel_size=(3, 3), stride=(1, 1))

>>print(type(model))

<class '__main__.Net2'>

>>print(type(model(1)))

<class 'torch.nn.modules.conv.Conv2d'>

第三個(gè)例子

class Net3(nn.Module):def __init__(self, a):super(Net3, self).__init__()self.weight = 123def forward(self): return 456model = Net3(1)

>>print(model)

Net3()

>>print(model())

456

>>print(type(model))

<class '__main__.Net3'>

>>print(type(model()))

<class 'int'>

總結(jié)

以上是生活随笔為你收集整理的conv2d() received an invalid combination of arguments问题解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。