我正在使用zalando的代码,该代码由Nvidia实施为渐进式GAN。参见:https://github.com/zalandoresearch/disentangling_conditional_gans
他们在训练时使用3个网络:G
,D
和Gs
。这三个模型都是https://github.com/zalandoresearch/disentangling_conditional_gans/blob/master/tfutil.py#L424
Network
类的实例
这些模型使用许多辅助函数进行存储和加载,这些函数使用python的pickle格式将3个模型保存为*.pkl
。
我只对导出Gs
模型感兴趣。
如何将其转换为保存的模型(因为代码不使用tf.Saver),最后将其转换为冻结的模型,以便我可以轻松推断。
在加载模型后,我会这样做:
allvars = [n.name for n in tf.get_default_graph().as_graph_def().node]
Gs_vars = [i for i in allvars if i.split('/')[0] == 'Gs']
但是,运行此命令时:
Gs_saver = tf.train.Saver({"Gs": Gs_vars})
它抛出一个错误,说:
*** ValueError: Slices must all be Variables: Gs/latents_in
使用Gs
模型的正确实现是:
images = Gs.run(latents, labels, masks, minibatch_size=minibatch_size, num_gpus=config.num_gpus, out_mul=127.5, out_add=127.5, out_shrink=image_shrink, out_dtype=np.uint8)
Gs
需要3个输入,分别存储为Gs/latents_in
,Gs/masks_in
和Gs/labels_in
。