Java使用tensorflow向量库_Tensorflow小技巧整理:tf.trainable_variables(), tf.all_variables(), tf.global_variable...

tf.trainable_variables(), tf.all_variables(), tf.global_variables()查看变量

在使用tensorflow搭建模型时,需要定义许多变量,例如一个映射层就需要权重与偏置。当网络结果越来越复杂,变量越来越多的时候,就需要一个查看管理变量的函数,在tensorflow中,tf.trainable_variables(), tf.all_variables(),和tf.global_variables()可以来满足查看变量的要求,来简单说一下他们的不同。

tf.trainable_variables()

顾名思义,这个函数可以也仅可以查看可训练的变量,在我们生成变量时,无论是使用tf.Variable()还是tf.get_variable()生成变量,都会涉及一个参数trainable,其默认为True。以tf.Variable()为例:

__init__(

initial_value=None,

trainable=True,

collections=None,

validate_shape=True,

...

)

对于一些我们不需要训练的变量,比较典型的例如学习率或者计步器这些变量,我们都需要将trainable设置为False,这时tf.trainable_variables() 就不会打印这些变量。举个简单的例子,在下图中共定义了4个变量,分别是一个权重矩阵,一个偏置向量,一个学习率和计步器,其中前两项是需要训练的而后两项则不需要。

4521c35d0e9e892c3a836ebd695dd494.png

这个时候tf.trainable_variables()效果如下:

0d87d6a9a2fb33d97df9ee0820424f80.png

另一个问题就是,如果变量定义在scope域中,是否会有不同。实际上,tf.trainable_variables()是可以通过参数选定域名的,如下图所示:

7db29789ab6636cad6c8c5e1db8c838a.png

我们重新声明了两个新变量,其中w2是在‘var’中的,如果我们直接使用tf.trainable_variables(),结果如下:

60b417d6ab26a3c05b6e3e7662823f4b.png

但如果我们只希望查看‘var’域中的变量,我们可以通过加入scope参数的方式实现:

7e52e2f1a246a7185e5603b45e2305e1.png

可以看到,只有w2被打印出来。

tf.global_variables()

回到第一个例子,如果我希望查看全部变量,包括我的学习率等信息,可以通过tf.global_variables()来实现。效果如下:

5c0966beeb6a0884f92a66d7b94c8867.png

可以看到,这时候打印出来了4个变量,其中后两个即为trainable=False的学习率和计步器。与tf.trainable_variables()一样,tf.global_variables()也可以通过scope的参数来选定域中的变量。

tf.all_variables()

与tf.global_variables()作用拥有相似的功能,只是版本问题,可以看到:

caf658152eb30570282794937fc36ad5.png

运行时会有warning的提示。还有一点需要注意的是,tf.all_variables()似乎是没有scope输入参数的,这点作用性不如前两个那么强。

应用中

在实际代码中,我们可以在定义model的时候,定义一个内部函数用来查看模型中的变量,在训练过程中,可以在开始的时候调用一次,来看一下变量名称及其阶数,对模型控制性更强,了解更加明确。

b7ed2aa312eca41973df2ac8fa86b237.png

承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。

本文同步分享在 博客“于小勇”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值