最近跑的代码有点乱,有的直接告诉你怎么跑,一步一步都给你写出来,首先运行哪个文件,怎么运行,在终端输入啥,然后再运行哪个文件……人都给你写好了。有的就是啥也不告诉你,就光秃秃的代码扔在那,也不知道先弄哪个后弄哪个。所以为了给以后的跑代码铺路,我试着总结一下最近看的这些代码都是如何运行的吧。

首先说简单的——GAN-mnist:

这个代码很明显,就只有一个py文件,所以只需要点击run就可以了。如果想在终端运行,只需要进入代码目录,然后python XXX.py就可以了

其次说稍难的——CGAN-生成建筑:

这个代码有4个py文件,分别是

(1) train.py           训练的主控程序
(2) image_reader.py    数据读取接口
(3) net.py             定义网络结构
(4) evaluate.py        测试的主控程序

而展开看需要运行的train.py和evaluate.py,可以看到if name == main下并没有需要注意的地方,这里所谓的特别注意的地方,一般是路径,即数据集的路径、输出结果的路径、日志的路径等。一般来说,代码都已经把这些写好了,直接默认运行就可以,除非你想临时改变路径。这一部分我们会在后面的cycleGAN-VC讲到。

if __name__ == '__main__':
    main()

上面就是CGAN-生成建筑的train和evaluate的if name == main下的内容,只有main()函数而已,没有对路径有指示,所以这种情况下还是直接运行就可以。依然是进入终端,然后进入代码目录,然后python XXX.py就可以了。

然后说个再难一点的——cycleGAN:

这个是生成图像的那个cycleGAN,不是vc,所以我写的是cycleGAN而不是cycleGAN-vc。这个代码的组成是这样的:

(1) train.py 训练的主控程序
(2) train_image_reader.py 训练数据读取接口
(3) net.py 定义网络结构
(4) evaluate.py 测试的主控程序
(5) test_image_reader.py 训练数据读取接口

我们要运行的是train.py和evaluate.py,这里以train为例,说说需要注意的问题。

代码运行碎碎念-LMLPHP

这是train.py开头的代码,可以看到加载必要的库之后,是一大串的parser.add_argument()这是今后很多大型代码都具有的内容,一定要注意。我们跑代码时需要输入的很多东西都与他们有关。可以看到,最后我们定义了x域的训练图片路径和y域的训练图片的路径。这就是我们需要注意的地方,有的时候我们需要自己制定这个路径,即使有了默认路径,但有时候我们也会突然想换路径。这个时候就需要注意了,如果要启动训练,只需改动两个参数即可,即train.py中参数中的最后两个(即x_train_data_path和Y_train_data_path,指X域和Y域的训练输入图像路径)。可以改自己制定的路径,也可以使用代码默认的路径。如果要改,你可以直接从代码里改,也可以在终端运行时再改(这种方法见cycleGAN-vc)。

然后是再难一点的——starGAN:

这个代码在readme里直接给出了运行方法:

对于download:

> python download.py celebA

对于train:

python main.py --phase train

对于test:

python main.py --phase test

至于为什么,我们进入代码中看一下:

代码运行碎碎念-LMLPHP

代码运行碎碎念-LMLPHP

上图是download.py的代码片段,可以看到if name == main下,有一个if语句,如果我们args.dataset里输入CelebA、celebA、celebA中的任意一种,就下载数据集到./dataset里去。又由于这个download.py只有一个add_argument,所以直接python download.py celebA就可以,当然你也可以python download.py dataset celebA

而main.py里是这样的:

代码运行碎碎念-LMLPHP

代码运行碎碎念-LMLPHP

if name == main下虽然没东西,但在main()里确是又东西的,也就是说我们不仅要看if name == main,还要看main()里到底有什么。可以看出,这里如果args.phase==train,就会运行train,如果是test就运行test。所以这里就是为什么我们要

  • python main.py --phase train
  • python main.py --phase test

的原因了。另外需要注意,这里写了--phase,是因为args.phase对应着add_argument('--phase')。

最后上重头戏——cycleGAN-vc:

代码运行碎碎念-LMLPHP

这里定义了默认的路径,传递给add_argument,所以我们如果要指定路径,可以

python download.py --download_dir ./download --data_dir ./data --datasets vcc2016

很明显,python代表我们要打开python,download.py表示我们要运行的py是download.py,--download是因为在add_argument中就是--download,然后空一格,写你要指定的路径(虽然这里还是使用的默认路径),--data_dir和--datasets的原因与此相同。

我们用--,究其原因,就在于代码中的:

parser.add_argument()

总结:

1.对于只有一个py的代码,直接运行就可以

2.对于多个py的代码,运行py时要注意开头和结尾,也就是开头的add_argument和结尾的if name == main。在路径、名称、运行的代码块等方面进行指定时,需要与add_argument的参数名一致,先写参数名(如--phase、--),空一格,再写参数(即路径、名称、运行的代码块)

3.例子:

指定运行的代码块:

python main.py --phase train

指定路径和名称:

python download.py --download_dir ./download --data_dir ./data --datasets vcc2016
07-21 15:02