前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tensorflow:提示找不到Adam或者RMSProp变量,Did you mean to set reuse=None in VarScope?

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

作者头像
DoubleV
发布2018-09-12 15:07:27
1.7K0
发布2018-09-12 15:07:27
举报
文章被收录于专栏:GAN&CVGAN&CV

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/details/77856961

错误的完整信息

代码语言:javascript
复制
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?

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

代码语言:javascript
复制
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的地方是

代码语言:javascript
复制
tf.get_variable_scope().reuse_variables()

或者

代码语言:javascript
复制
With tf.variable_scope(name) as scope :
       Scope.reuse_variables()

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

代码语言:javascript
复制
With tf.variable_scope(tf.get_variables_scope())

把它放在需要调用函数的地方,我这里是discriminator函数: 代码更改如下所示: Wrong:

代码语言:javascript
复制
       G = generator(z)
       D, D_logits = discriminator(images)
       samples = sampler(z)
       D_, D_logits_ = discriminator(G, reuse=True)

True:

代码语言:javascript
复制
   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)

我看有的人说在使用优化函数的上面加with。。。这句话,但是我试用了并没有用。 类似这样:

代码语言:javascript
复制
   with tf.variable_scope(tf.get_variable_scope(), reuse=None):#新增
       d_optim = tf.train.RMSPropOptimizer(LR).minimize(d_loss,var_list=d_vars, global_step=global_step)
       g_optim = tf.train.RMSPropOptimizer(LR).minimize(g_loss,var_list=g_vars, global_step=global_step)

另外,出现此问题的原因也可能是在该复用网络参数的时候没有复用,复用时要设置reuse= True

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档