DCGAN实战记录

本文记录了作者在实践中遇到的DCGAN训练问题,包括NameError、生成图片、加载checkpoint、损失曲线查看、模型测试等方面的困扰及解决办法。通过调整代码,作者解决了训练图像生成、批大小设置、使用TensorBoard、加载模型等问题,还探讨了损失函数和标签平滑的实现。
摘要由CSDN通过智能技术生成

一开始参考博客学习笔记:GAN和DCGAN入门 并在github上下载了代码。

根据该博主的教程直接上自己的数据集(很小,一百多张图片) 

有几个令人头疼的bug:

目录

NameError: name 'j' is not defined

每次训练生成的图片呢?

自动load之前的checkpoint

如何查看训练过程中的损失曲线

训练好的模型,想要调用checkpoint进行测试

生成单张图片

修改损失函数和优化函数


NameError: name 'j' is not defined

在该链接中找到了组织,也尝试按照大家都说好的解决办法修改

1,2觉得是有用的,但3还是有问题,而且觉得该解决方案给的程序问题很大,cropped_image压根没用啊为啥大家都说好?

于是继续找解决方案,又回到了一开始的博客中,发现po出的代码和现在github上的还是有很大的出入的,尤其是被大家改来改去的transform函数,好歹用上了cropped_image!于是果断复制粘贴,可以成功运行了

 

每次训练生成的图片呢?

这里一开可能是我没有理解原程序的规则,以为每个epoch都会有图片,而我都训练到了五十多了sample还是空的,就觉得很绝望,到处找解决办法,发现了另一个博客(强推!!),其中po出了四个py文件的全部代码,发现与自己的也有很大出入,于是再一次复制粘贴,解决了一个小bug:main.py中line14改成

flags.DEFINE_float("train_size", np.inf, "The size of train images [np.inf]")

有图片了!然而似乎都是训练后生成的test图片,不是文章中那样的训练过程中生成的图片。

冷静分析,总结如下:

1. 在model.py line288中原程序规定每100个batch保存一次训练图片,而自己的样本数太少,故图像生成频率过低或干脆不生成训练过程中的图像!(可能之前的程序并没问题hhh)

if np.mod(counter, 100) == 1:

2. batch_size需要为完全平方数,不然会出现one_pic_error的报错,也可以根据网友说的修改utils.py的代码:

def image_manifold_size(num_images):
  #manifold_h = int(np.floor(np.sqrt(num_images)))
  #manifold_w = int(np.ceil(np.sqrt(num_images)))
  manifold_w = int(16) 
  manifold_h = int(num_images/16)
  assert manifold_h * manifold_w == num_images
  return manifold_h, manifold_w

不懂为什么要是16,应该可以改成别的。 最后打算就用64作为batch_size算了,然后修改生成sample的频率为10

if np.mod(counter, 10) == 1:

自动load之前的checkpoint

如果不是真的要基于前面的训练结果再训练,就把之前的 checkpoint文件删除再重新训练

如何查看训练过程中的损失曲线

一开始以为程序中并没有相关代码,才发现其实是在ops.py中用到了tensorflow自带的tensorboard功能,见https://blog.csdn.net/duanlianvip/article/details/98498826

然而报错:ImportError: cannot import name '_message'

根据文章在cmd输入

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值