Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RuntimeError:生成器的加载状态\u dict中出现错误:状态\u dict中缺少密钥_Python_Pytorch_Dcgan_State Dict - Fatal编程技术网

Python RuntimeError:生成器的加载状态\u dict中出现错误:状态\u dict中缺少密钥

Python RuntimeError:生成器的加载状态\u dict中出现错误:状态\u dict中缺少密钥,python,pytorch,dcgan,state-dict,Python,Pytorch,Dcgan,State Dict,我试图使用MNIST数据集训练DCGAN模型,但训练结束后无法加载gen.state\u dict() 导入火炬 导入torch.nn作为nn 将torchvision.dataset导入为数据集 导入torchvision.transforms作为变换 来自torch.utils.tensorboard导入摘要编写器 进口火炬视觉 导入操作系统 从torch.autograd导入变量 workspace_dir='/content/drive/My drive/practice' 设备=tor

我试图使用MNIST数据集训练DCGAN模型,但训练结束后无法加载
gen.state\u dict()

导入火炬
导入torch.nn作为nn
将torchvision.dataset导入为数据集
导入torchvision.transforms作为变换
来自torch.utils.tensorboard导入摘要编写器
进口火炬视觉
导入操作系统
从torch.autograd导入变量
workspace_dir='/content/drive/My drive/practice'
设备=torch.device('cuda'如果torch.cuda.U可用,其他'cpu')
打印(设备)
img_尺寸=64
信道\u img=1
lr=2e-4
批量大小=128
z_dim=100
纪元=10
功能\u gen=64
功能\u盘=64
save_dir=os.path.join(工作区_dir,'logs')
os.makedirs(保存目录,存在确定=True)
将matplotlib.pyplot作为plt导入
transforms=transforms.Compose([transforms.Resize(img_size),transforms.ToTensor(),transforms.Normalize(mean=(0.5),std=(0.5,)]))
train_data=datasets.MNIST(root='dataset/',train=True,transform=transforms,download=True)
train\u loader=torch.utils.data.DataLoader(train\u数据,batch\u大小=batch\u大小,shuffle=True)
计数=0
对于x、y列装载机:
如果计数=5:
打破
打印(x形、y形)
计数+=1
类鉴别器(nn.模块):
定义初始化(自身、通道、功能):
超级(鉴别器,自身)。\uuuu init\uuuuuuu()
self.disc=nn.Sequential(
#输入:N*通道\u img*64*64
nn.Conv2d(通道img,特征d,4,2,1),#论文在鉴别器特征的早期层中没有使用batchnorm_d*32*32
nn.LeakyReLU(0.2),
自我功能块(功能块,功能块*2,4,2,1),#功能块*2*16*16
自块(特征d*2,特征d*4,4,2,1),#特征d*4*8*8
自定块(特征4,特征8,4,2,1),#特征8*4*4
nn.Conv2d(特征_d*8,1,4,2,0),1*1*1
nn.Sigmoid()
)
定义块(自身、输入通道、输出通道、内核大小、步幅、填充):
返回nn.顺序(
nn.Conv2d(输入通道、输出通道、内核大小、步幅、填充、偏差=False),
nn.2D(输出信道),
nn.LeakyReLU(0.2)
)
def前进(自身,x):
返回自我光盘(x)
类生成器(nn.模块):
定义初始(自身、Z尺寸、通道、功能):
超级(生成器,自我)。\uuuuu初始化
self.gen=nn.Sequential(
#输入:n*z_尺寸*1*1
自块(Z尺寸,特征值为16,4,1,0),#特征值为16*4*4
自我功能块(功能块16,功能块8,4,2,1),#功能块8*8*8*8*8
自我功能块(功能块8,功能块4,4,2,1),#功能块4*16*16
自块(特征4,特征2,4,2,1),#特征2*32*32
nn.ConvTranspose2d(特征2,通道4,2,1)#
nn.Tanh()#[-1到1]标准化图像
)
定义块(自身、输入通道、输出通道、内核大小、步幅、填充):
返回nn.顺序(
nn.ConvTranspose2d(输入通道、输出通道、内核大小、步幅、填充、偏差=假),#w'=(w-1)*s-2p+k
nn.2D(输出信道),
nn.ReLU()
)
def前进(自身,x):
返回自我生成(x)
def初始化重量(型号):
对于model.modules()中的m:
如果isinstance(m,(nn.Conv2d,nn.ConvTranspose2d,nn.batchNormal2d)):
nn.初始正常值(m.重量数据,0.0,0.02)
发电机=发电机(z尺寸、通道img、特征)。至(设备)
disc=鉴别器(通道、特征、光盘)。至(设备)
初始化权重(gen)
初始化重量(光盘)
opt_gen=torch.optim.Adam(gen.parameters(),lr=lr,betas=(0.5,0.999))
opt_disc=torch.optim.Adam(disc.parameters(),lr=lr,betas=(0.5,0.999))
标准=nn.BCELoss()
#固定噪声=火炬。随机(32,z尺寸,1,1)。至(设备)
#writer\u real=SummaryWriter(f“logs/real”)
#writer\u fake=SummaryWriter(f“logs/fake”)
步长=0
火车将军()
盘.列车()
z_sample=变量(torch.randn(100,z_dim,1,1)).cuda()
对于范围(2)中的历元:
对于枚举(列加载器)中的批处理(实)idx:
real=real.to(设备)
噪声=火炬的随机数((批次尺寸,z尺寸,1,1))到(设备)
假=发电机(噪声)
#列车鉴别器最大对数(D(x))+对数(1-D(G(z)))
disc\u real=disc(real)。重塑(-1)
损耗盘实=标准(盘实、火炬、类似盘实)
圆盘假=圆盘(假)。重塑(-1)
损耗盘假=标准(盘假、火炬、零类(盘假))
损耗盘=(损耗盘假+损耗盘真)/2
圆盘零度梯度()
向后丢失光盘(保留图表=真)
opt_disc.步骤()
#列车发电机最小日志(1-D(G(z)))最大日志(D(G(z)))
输出=光盘(假)。重塑(-1)
损耗=标准(输出,火炬式(输出))
zero_grad将军()
损失_gen.backward()
选择第二代步骤()
打印(f'\rEpoch[{epoch+1}/{3}]{batch_idx+1}/{len(火车装载机)}丢失:{Loss_disc.item():.4f}丢失:{Loss_gen.item():.4f}',end='')
伊瓦尔将军()
f_imgs_sample=(gen(z_sample).data+1)/2.0
filename=os.path.join(save_dir,f'Epoch_{Epoch+1:03d}.jpg')
torchvision.utils.save_image(f_imgs_示例,文件名,nrow=10)
打印(f'|将一些示例保存到{filename}.'))
#显示生成的图像
grid\u img=torchvision.utils.make\u grid(f\u imgs\u sample.cpu(),nrow=10)
plt.图(figsize=(10,10))
plt.imshow(网格排列(1,2,0))
plt.show()
火车将军()
torch.save(gen.state\u dict(),os.path.join(workspace\u dir,f'dcgan\u d.pth'))
torch.save(disc.state\u dict(),os.path.join(workspace\u dir,f'dcgan\u g.pth'))
我无法在此步骤中加载发电机状态命令:

# load pretrained model
#gen = Generator(z_dim,1,64)
gen=Generator(z_dim,channel_img,features_gen).to(device)
gen.load_state_dict(torch.load('/content/drive/My Drive/practice/dcgan_g.pth'))
gen.eval()
gen.cuda()
以下是错误:

RuntimeError                              Traceback (most recent call last)
<ipython-input-18-4bda27faa444> in <module>()
      5 
      6 #gen.load_state_dict(torch.load('/content/drive/My Drive/practice/dcgan_g.pth'))
----> 7 gen.load_state_dict(torch.load(os.path.join(workspace_dir, 'dcgan_g.pth')))
      8 #/content/drive/My Drive/practice/dcgan_g.pth
      9 gen.eval()

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in load_state_dict(self, state_dict, strict)
   1050         if len(error_msgs) > 0:
   1051             raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
-> 1052                                self.__class__.__name__, "\n\t".join(error_msgs)))
   1053         return _IncompatibleKeys(missing_keys, unexpected_keys)
   1054 

***RuntimeError: Error(s) in loading state_dict for Generator:
    Missing key(s) in state_dict***: "gen.0.0.weight", "gen.0.1.weight", "gen.0.1.bias", "gen.0.1.running_mean", "gen.0.1.running_var", "gen.1.0.weight", "gen.1.1.weight", "gen.1.1.bias", "gen.1.1.running_mean", "gen.1.1.running_var", "gen.2.0.weight", "gen.2.1.weight", "gen.2.1.bias", "gen.2.1.running_mean", "gen.2.1.running_var", "gen.3.0.weight", "gen.3.1.weight", "gen.3.1.bias", "gen.3.1.running_mean", "gen.3.1.running_var", "gen.4.weight", "gen.4.bias". 
    Unexpected key(s) in state_dict: "disc.0.weight", "disc.0.bias", "disc.2.0.weight", "disc.2.1.weight", "disc.2.1.bias", "disc.2.1.running_mean", "disc.2.1.running_var", "disc.2.1.num_batches_tracked", "disc.3.0.weight", "disc.3.1.weight", "disc.3.1.bias", "disc.3.1.running_mean", "disc.3.1.running_var", "disc.3.1.num_batches_tracked", "disc.4.0.weight", "disc.4.1.weight", "disc.4.1.bias", "disc.4.1.running_mean", "disc.4.1.running_var", "disc.4.1.num_batches_tracked", "disc.5.weight", "disc.5.bias".
运行时错误回溯(最近一次调用)
在()
5.
6#gen.load_state_dict(火炬装载('/content/drive/My drive/practice/dcgan_g.pth'))
---->7 gen.load\u state\u dict(torch.load(os.path.join(workspace\u dir,'dcgan\u g.pth'))
8#/content/drive/My drive/practice/dcgan#u g.pth
9总评估()
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py处于加载状态(self、state、strict)
1050如果len(错误)>0:
1051 raise RUNTIMERROR('加载状态下的错误