tensorflow:提示找不到Adam或者RMSProp变量,Did you mean to set reuse=None in VarScope?

匿名 (未验证) 提交于 2019-12-03 00:30:01

https://blog.csdn.net/qq_25737169/article/details/77856961

https://www.baidu.com/link?url=VUL_CLGZzWEuHCKYZs2aF_Qoas3vZ7rkLW5yOhNXlMjj_mBieFmeWMhCf4lkwqCnZboolB30MDvXhJmZlehVje2XzIVz1_IJFOR2aAVD7tqjuS254z--Y94TbG5CX6oOt7gpaVBvFG-P617l44xu_LvF8f0lj49LgK34pFWlf6q&wd=&eqid=cd1c0e4400003e23000000065b28c4af

ValueError: Variable d_model/d_block_2/d_vbn_2/gamma/RMSProp/ does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?
Variable discriminator/conv/weights/RMSProp/does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?

这个错误是在使用优化函数

tf.train.RMSPropOptimizer() tf.train.AdamOptimizer()



tf.get_variable_scope().reuse_variables()
原因是使用Adam或者RMSProp优化函数时,Adam函数会创建一个Adam变量,目的是保存你使用tensorflow创建的graph中的每个可训练参数的动量,但是这个Adam是在reuse=True条件下创建的,之后reuse就回不到None或者False上去,当reuse=True,就会在你当前的scope中reuse变量,如果在此scope中进行优化操作,就是使用AdamOptimizer等,他就会重用slot variable,这样子会导致找不到Adam变量,进而报错。

设置reuse=True的地方是

tf.get_variable_scope().reuse_variables()

或者

With tf.variable_scope(name) as scope :        Scope.reuse_variables()

一般在运行GAN程序的时候会用到这段代码。解决方法就是将这个scope独立出来,reuse=True就只在当前scope中起作用,使用

With tf.variable_scope(tf.get_variables_scope())



Wrong:

       G = generator(z)        D, D_logits = discriminator(images)        samples = sampler(z)        D_, D_logits_ = discriminator(G, reuse=True)

True:

   with tf.variable_scope("for_reuse_scope"):        G = generator(z)        D, D_logits = discriminator(images)        samples = sampler(z)        D_, D_logits_ = discriminator(G, reuse=True)


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!