level 1
wjwstates
楼主
tensorflow 中的 add_to_collection 如何更新权重和loss
例如 tf.add_to_collection('losses', weight_loss) 是在创建隐含层时给最后的代价函数加上权重W的L2正则化代价loss(即w的平方和),W一开始初始化为截断的正态分布,
那再之后进行梯度训练时 权重的值发生改变 后面的代码也没有再加上 tf.add_to_collection,那么在collection('losses')中的weight_loss的值会改变么?
但我在自己写代码测试的时候
a = tf.Variable(tf.constant(100.,shape=[1]),name='a')
tf.add_to_collection('lossess',a)
然后在后面写了个for循环,在循环里更改a的值 可是lossess里a的值并不会改变,还是一开始的100,但是我若在循环里每次改变a的值时加上tf.add_to_collection('lossess',a),会发现 collection里的lossess里出现了a:0,a:1,a:2等等新的变量,也就是说没写一次tf.add_to_collection('lossess',a)就会多一个同是a的变量,也不会改变collection里a的值。
所以想请问下有熟悉的人,说一下在写神经网络时,把w的L2正则化loss加入collection,那么它是怎么实现每次训练时用到最新的权重w的值,因为按照我上面所说,collection里weight_loss始终只是一开始初始化的值
求大神帮忙解读一下 谢谢了
2017年06月02日 20点06分
1
例如 tf.add_to_collection('losses', weight_loss) 是在创建隐含层时给最后的代价函数加上权重W的L2正则化代价loss(即w的平方和),W一开始初始化为截断的正态分布,
那再之后进行梯度训练时 权重的值发生改变 后面的代码也没有再加上 tf.add_to_collection,那么在collection('losses')中的weight_loss的值会改变么?
但我在自己写代码测试的时候
a = tf.Variable(tf.constant(100.,shape=[1]),name='a')
tf.add_to_collection('lossess',a)
然后在后面写了个for循环,在循环里更改a的值 可是lossess里a的值并不会改变,还是一开始的100,但是我若在循环里每次改变a的值时加上tf.add_to_collection('lossess',a),会发现 collection里的lossess里出现了a:0,a:1,a:2等等新的变量,也就是说没写一次tf.add_to_collection('lossess',a)就会多一个同是a的变量,也不会改变collection里a的值。
所以想请问下有熟悉的人,说一下在写神经网络时,把w的L2正则化loss加入collection,那么它是怎么实现每次训练时用到最新的权重w的值,因为按照我上面所说,collection里weight_loss始终只是一开始初始化的值
求大神帮忙解读一下 谢谢了