理解tensorflow变量空间scope

问题出现在编写lstm程序时碰到两个问题始终得不到解决:

Variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/weights already exists, disallowed.

Attempt to reuse RNNCell <tensorflow.contrib.rnn.python.ops.core_rnn_cell_impl.BasicLSTMCell object at 0x000002206E714240> with a different variable scope than its first use.

其实知道这两个问题和变量的作用空间相关,但是对这个name_scope 和 variable_scope不是很理解,这两日恶补相关知识。

 

期间看了百度谷歌和csdn博主的答案,很多文章都没有讲到点子上,原理没搞懂,换个问题ERROR还是存在。不过也基本上知道是 get_variable() 和 variable_scope() 出了问题。

get_variable() 和 variable_scope()

要理解 name_scope 和 variable_scope, 首先必须明确二者的使用目的。我们都知道,和普通模型相比,神经网络的节点非常多,节点节点之间的连接(权值矩阵)也非常多。所以我们费尽心思,准备搭建一个网络,然后有了图1的网络,WTF! 因为变量太多,我们构造完网络之后,一看,什么鬼,这个变量到底是哪层的??

fig1. 引入命名空间之前 fig2. 引入命名空间之后

为了解决这个问题,我们引入了 name_scope 和 variable_scope, 二者又分别承担着不同的责任:

  • * name_scope: * 为了更好地管理变量的命名空间而提出的。比如在 tensorboard 中,因为引入了 name_scope, 我们的 Graph 看起来才井然有序。
  • * variable_scope: * 大大大部分情况下,跟 tf.get_variable() 配合使用,实现变量共享的功能。

tf.Variable和tf.get_variable有什么区别呢?name_scope和variable_scope又有什么区别呢?下面细细说来:

首先明确tf.Variable和tf.get_variable都是获取变量的操作,其中tf.Variable的详细介绍可见

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值